繁体   English   中英

socketio-jwt断开过期令牌

[英]socketio-jwt disconnect expired tokens

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

该库不支持此功能,您可以在所需的每个套接字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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM