Javascript 在socket.io中调用socket.connect()时,如何传递附加数据?

Javascript 在socket.io中调用socket.connect()时,如何传递附加数据?,javascript,sockets,socket.io,Javascript,Sockets,Socket.io,我试图找到一种方法来传递额外的数据,比如用户名、头像url,当用户点击登录时连接到套接字。例如: const logIn = ({ username, avatar }) => { socket.auth = { username }; socket.connect({ query: { username: username, avatar: avatar } }); } 在服务器端: io.use((socket, next) => { console.log

我试图找到一种方法来传递额外的数据,比如用户名、头像url,当用户点击登录时连接到套接字。例如:

const logIn = ({ username, avatar }) => {
   socket.auth = { username };
   socket.connect({ query: { username: username, avatar: avatar } });
}
在服务器端:

io.use((socket, next) => {
    console.log("===> Data:", socket.request._query);
});
但我并没有得到用户名和化身字段的任何键值。我试图搜索文档,但找不到与传递数据有关的socket.connect()的任何信息


如何在socket.connect()中传递数据?

使用JWT并将该数据作为对象的一部分传递

因此,当您“授权”时,它会将JWT与avitar等一起发送回

当您将其发送到服务器并解码令牌时,可以将其设置为套接字对象的一部分

例如(我们目前使用的是jsonwebtoken包)

然后,您可以在发出时访问它,因为套接字ID对于用户是唯一的,它应该保存值,如果他们断开/重新连接,则令牌仍将包含值


在群集模式下,使用redis socket.io并将其作为hset传递,以使用socketID存储数据

一旦成功连接,只需发送一条消息。我考虑过这一点,但我希望避免将状态存储在父组件中,而只需使用登录方法本身将所有内容发送到服务器。
 // verify token
 jwt.verify(token, '[password]', (err, decoded) => {
 try{
 /* connecting */
 
 socket.avitar = decoded.avitar;
 socket.nickname = "nick name";
 if(err) return next(err);
 
 //('success!')