소켓 서버와 JWT 토큰 주고 받기

https://socket.io/docs/v4/middlewares/

클라이언트와 소켓 서버가 자격 증명을 주고 받기

클라이언트

// plain object
const socket = io({
  auth: {
    token: "abc"
  }
});

// or with a function
const socket = io({
  auth: (cb) => {
    cb({
      token: "abc"
    });
  }
});

서버

io.use((socket, next) => {
  const token = socket.handshake.auth.token;
  // ...
});

미들웨어를 사용해서 에러를 주고받기 (클라↔서버)

// client-side -- 기본적인 사용법
socket.on("connect_error", (err) => {
  console.log(err.message); // prints the message associated with the error
});
// server-side
io.use((socket, next) => {
  const err = new Error("not authorized");
  err.data = { content: "Please retry later" }; // additional details
  next(err); // 에러개체를 사용하여 메서드next를 호출하면 연결이 거부되고 클라이언트가 이벤트수신
});

// client-side
socket.on("connect_error", (err) => {
  console.log(err instanceof Error); // true
  console.log(err.message); // not authorized
  console.log(err.data); // { content: "Please retry later" }
});