我正在使用JWT向socket.io进行身份验证。这是client代码:
const socket = io.connect(
'ws://123.456.789.0:8500',
{
query: {
token: jwtToken
},
transports: ['websocket', 'polling']
}
);
现在,在某些时候jwtToken
到期,并且连接从服务器断开连接:
...
io.on('connection', async (socket) => {
const isExpired = await checkExpireDateEveryMinute(socket.exp, 5);
if (isExpired) {
socket.disconnect();
}
await socket.on('query', async (data) => {
...
});
});
哪种方法是使用新生成的JWT令牌从客户端重新连接的正确方法?找不到太多资源。谢谢。
[我认为一种较常见的方法是使用socket.io的中间件功能,如果您使用Error对象调用next(),则它将阻止触发on(“ connection”)回调。它还会将错误消息传输到前端。您可以通过这种方式发送新令牌,然后重新连接。
这里是一个例子:
async function authenticate(socket,next){
const isExpired = await checkExpireDateEveryMinute(socket.exp, 5);
if(isExpired){
const newToken = getNewToken()//Get a new token...
next(new Error(newToken))//This will cause an error in your frontend, and pass the new token.
}else{
next();
}
}
io.use(authenticate)//Register the middleware.
我必须指出一点:您正在对socket.on(query,...)进行“等待”,这没有任何意义。