socketio-jwt断开已过期的令牌

时间:2016-09-09 19:07:36

标签: node.js socket.io jwt

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

1 个答案:

答案 0 :(得分:1)

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

Github Issue中,一个贡献者回答了这个比喻:

id_token就像您的国民 护照,都有到期日,只要您的护照可以输入 护照没有过期,大多数国家/地区不会跟踪 过期以追捕你。

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

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('unauthorized'), expiresIn)

  socket.on('disconnect', () => timer.clearTimeout(timeout))

  return next()
}