Woo*_*dsy 6 node.js socket.io jwt
我能够使用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()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |