我有这个用例: - 我正在开发一个带有用于用户管理和聊天的webapp游戏,这是在MERN上,以及一个统一游戏,socket.io是多人游戏的实时消息传递层。 - 用户可以通过提供一对电子邮件/密码或在FB / Gamil /等上进行身份验证来注册webapp。像往常一样,在这种情况下,用户的电子邮件被获取并保存到MongoDB,这是通过护照完成的。 - 快递方面没有会话,socket.io正在redis上。没有cookie,但使用了JWT。
我的问题是我不知道这是什么最好的做法。我看了这个 article 还有这个 one 它们的内容和代码都接近我想要做的,但在第一个:
app.use(express.cookieParser());
虽然我根本不想使用cookie,另一个也有代码:
cookie: {
secure: process.env.ENVIRONMENT !== 'development' && process.env.ENVIRONMENT !== 'test',maxAge: 2419200000}...
另外,我发现了这个 github
建议客户端(团结):
var socket = io.connect('http://localhost:9000');
socket.on('connect', function (socket) {
socket.on('authenticated', function () {
//do other things
})
.emit('authenticate', {token: jwt}); //send the jwt
});
意思是: 1.创建套接字 2.请求身份验证
但我认为我在另一篇文章中找到的方法更好,如果在发送到“io”的第一个连接请求中未提供JWT for auth,则根本不创建套接字,所以如果我'我这样做我会发出:
var socket = io.connect('http://localhost:9000', {query: {"JWT":"myjwt"}});
在我所在的服务器端:
io.on("connection", function(socket){...});
我想先获得JWT:
var jwt = socket.handshake.query["JWT"];
然后如果auth不成功,只需返回socket.disconnect('reason')并且根本不打开任何连接(这里可能我只是不明白,例如,作者在github中采用的方法source正在使用中间件技术,它可能也在其他任何事情之前完成。)
我仍然无法找出大师使用的最佳做法,请帮助我明白。