如何使用 socketio-jwt 处理 socket.io 中的身份验证错误

How to handle authentication errors in socket.io with socketio-jwt

按照 https://github.com/auth0/socketio-jwt 的示例,我无法触发身份验证失败。

您应该如何使用此库处理和配置身份验证错误?我在源代码中看到它应该抛出一个 UnauthorizedError 但我似乎无法触发它。

服务器端

  io
    .on('connection', socketioJwt.authorize({
      secret: 'test',
      timeout: 7000
    }))
    .on('authenticated', (socket) => {
      console.log('connected user: ' + socket.decoded_token.name);
    });

客户端

  socket.on('connect', function () {
    socket.emit('authenticate', {token: 'badtoken'}); //send the jwt
  });

  socket.on("error", function(error) {
    // this never fires
    if (error.type == "UnauthorizedError" || error.code == "invalid_token") {
      alert("User's token has expired");
    }
  });

我是否也需要在服务器代码上添加 .on('error, function(error))

查看 jwt 的源代码,它们实际上是在发出 "unauthorized",而不是 "error"。更改为

 socket.on("unauthorized", function(error) {
    // this should now fire
    if (error.data.type == "UnauthorizedError" || error.data.code == "invalid_token") {
      alert("User's token has expired");
    }
  });

还报告了文档和示例中的这个错误 here