Что следует вернуть из BE в FE, если в соединении через сокет отказано? - PullRequest
0 голосов
/ 09 июля 2020

Я использую Socket.io для соединения BE и FE, и в каждом соединении BE будет проверять токен, отправленный из FE, и если аутентификация не удалась, соединение будет разорвано.

I Мне интересно, когда соединение прерывается из-за неудачной аутентификации, что должно быть возвращено от BE к FE в соответствии с отраслевым стандартом разработки программного обеспечения?

  jwt.verify(token, process.env.JWT_SECRET, function (err, decoded) {
    if (err) {
      // Authentication failed, what should I do here?
      socket.disconnect();
    } else {
      // Authentication passed, do something.
      });
    }
  });

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вы можете использовать next(new Error("message"), если ваша аутентификация выполняется внутри промежуточного программного обеспечения. Socket.io автоматически отправляет эти ошибки в виде специальных пакетов ошибок клиенту, что означает, что вы можете прослушивать событие на стороне клиента, например:

// Client-side
socket.on("error", data => {
  // Do things with the error, such as
  // displaying it on the screen or something
});

Если вы это сделаете, тогда ваш auth должен выглядят так:

// Server-side
// Here I'm assuming you're using
// socket.io v1.x.x+
io.use((socket, next) => {
  jwt.verify(token, process.env.JWT_SECRET, function (err, decoded) {
    if (err) {
      // Authentication failed, send error packet to client
      next(new Error("Auth failed!"));
    } else {
      // Authentication passed, call next to keep going
      next();
    }
  });
});

Вот еще одна ссылка, если вам нужно немного больше разъяснений: https://socket.io/docs/namespaces/#Handling -middleware-error

0 голосов
/ 09 июля 2020

вы можете отправить клиенту сообщение о том, что причиной отказа в соединении является неудачная аутентификация

...