【问题标题】:How to handle authentication errors in socket.io with socketio-jwt如何使用 socketio-jwt 处理 socket.io 中的身份验证错误
【发布时间】:2015-12-18 02:12:16
【问题描述】:

按照 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))

【问题讨论】:

    标签: socket.io auth0


    【解决方案1】:

    查看 jwt 的源代码,它们实际上发出的是“未经授权”,而不是“错误”。改为

     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

    【讨论】:

    • 奇怪的是,如果原始语法配置为单次往返,例如io.use(socketioJwt.authorize({handshake:true}) .. 这很令人困惑
    • 那是因为使用单次往返不允许 Socket.IO 完成连接,所以 Socket.IO 发出错误。在第二个往返示例中,Socket.IO 确实连接,但是由于未经授权,socketio.jwt 发出响应,在这种情况下未经授权。如果这对你有帮助,请给这个答案投票。
    猜你喜欢
    • 2019-04-18
    • 2018-09-13
    • 2020-09-19
    • 1970-01-01
    • 2019-05-23
    • 2018-10-21
    • 2018-08-03
    • 2017-05-29
    • 2016-05-16
    相关资源
    最近更新 更多