如何在Socket.IO客户端中动态设置握手中的身份验证



在前端/客户端,我有一个使用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()),
}
);

相关内容

  • 没有找到相关文章

最新更新