在前端/客户端,我有一个使用auth令牌保护socket.io连接的实现。此身份验证令牌每隔几分钟就会在存储中更新一次。
const authToken = getToken()
socket = io(WS_BASE_URL, {
auth: {
token: authToken
}
});
在当前实现中,当套接字尝试重新连接时,authToken
不会更新。如何在每次尝试reconnect
时动态设置?
socket = io(WS_BASE_URL, {
auth: {
token: () => getToken()
}
});
我想要这种实现,每次从存储中传递一个函数来获取令牌。或者有什么方法可以修改reconnect_attempt
事件中的握手数据吗?
socket.io.on("reconnect_attempt", () => {
// update handshake
});
socket.io 2.x客户端api文档有这个
"查询内容也可以在重新连接时更新:;
socket.on('reconnect_attempt', () => {
socket.io.opts.query = {
token: 'fgh'
}
});
我认为你使用4.x是因为你使用了auth
选项,但我认为它基本上是一样的。当套接字重新连接时,服务器端的中间件将获得更新令牌。
您可以使用回调选项。您可能已经找到了解决方案,但仅供将来参考:
const socket = io(
"/path",
{
auth: (cb) => cb(yourFunctionToGetToken()),
}
);