【问题标题】:socketio-jwt disconnect expired tokenssocketio-jwt 断开过期令牌
【发布时间】:2017-01-17 23:58:18
【问题描述】:

我能够使用 socketio-jwt 进行身份验证,并且一切正常。我遇到的问题是,如果我将过期时间设置为最短时间并让它过期,我可以继续在连接上发出和接收消息。只要我不刷新页面,连接就会持续存在。一旦我刷新连接断开,我需要重新连接。是否可以让服务器检查过期令牌并断开连接?

【问题讨论】:

    标签: node.js socket.io jwt


    【解决方案1】:

    该库不支持此功能,您可以在所需的每个套接字 io 事件上验证令牌。

    Github Issue 中,一位贡献者用这个类比回答:

    id_token 就像你的国家 护照,都有有效期,只要你的护照就可以入境 护照没有过期,大多数国家不会跟踪 到期追捕你。

    您可以使用 socketio 中间件手动处理此问题,例如:

    const timer = require('long-timeout')
    
    function middleware (socket, next) {
      const decodedToken = socket.user // Assuming the decoded user is save on socket.user
    
      if (!decodedToken.exp) {
        return next()
      }
    
      const expiresIn = (decodedToken.exp - Date.now() / 1000) * 1000
      const timeout = timer.setTimeout(() => socket.disconnect(true), expiresIn)
    
      socket.on('disconnect', () => timer.clearTimeout(timeout))
    
      return next()
    }
    

    【讨论】:

    • @Woodsy 你能否将我的答案标记为正确,以防你认为当然是正确的。
    猜你喜欢
    • 2019-04-10
    • 2017-03-04
    • 2019-07-04
    • 2018-06-19
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2020-07-25
    相关资源
    最近更新 更多