用户使用socket.io进行身份validation

我已经红了这个教程: http : //howtonode.org/socket-io-auth 。 它演示了如何使用express和socket.io来authentication用户。 但有没有一种方法来validation用户只使用socket.io而不需要明示?

编辑:

对于会话处理,我使用RedisStore( https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO )。 还剩下什么是创build身份validationcookie的模块。 有谁知道一个socket.io实现我可以使用创build一个身份validationCookie,就像你可以做会话处理?

我知道这有点旧了,但是对于将来的读者,除了parsingcookie和从存储中检索会话(例如passport.socketio )的方法之外,您还可以考虑基于令牌的方法。

在这个例子中,我使用了非常标准的JSON Web Tokens。 您必须向客户端页面提供令牌,在本例中,设想一个返回JWT的authentication端点:

var jwt = require('jsonwebtoken'); // other requires app.post('/login', function (req, res) { // TODO: validate the actual user user var profile = { first_name: 'John', last_name: 'Doe', email: 'john@doe.com', id: 123 }; // we are sending the profile in the token var token = jwt.sign(profile, jwtSecret, { expiresInMinutes: 60*5 }); res.json({token: token}); }); 

现在,您的socket.io服务器可以configuration如下:

 var socketioJwt = require('socketio-jwt'); var sio = socketIo.listen(server); sio.set('authorization', socketioJwt.authorize({ secret: jwtSecret, handshake: true })); sio.sockets .on('connection', function (socket) { console.log(socket.handshake.decoded_token.email, 'has joined'); //socket.on('event'); }); 

socket.io-jwt中间件期望查询string中的令牌,所以从客户端连接时只需要附加它:

 var socket = io.connect('', { query: 'token=' + token }); 

我在这里写了一个关于这个方法和cookie的更详细的解释。

相反,或者手动configurationauthentication和会话处理代码,我build议去一个专门的模块,如session.socket.io (但请注意,这是一个需要快递的模块)。

我猜(但不知道),因为你需要某种types的会话处理,并且你可能不希望手动执行这个操作,所以有downvotes ;-)。 因此,在这里坚持使用Express是个不错的主意。

尽pipe如此,这是一个有趣的问题,尽pipe如果没有Express,我不能回答这个问题。

node.js,我刚刚开始几天前,我很新。 我只能回答这个问题的第一部分,这是用户authentication,而不使用快递。 而且我也没有会话风格的处理。
我仍然在回答这个问题的原因,就是帮助其他刚刚结识新朋友的人以一个更简单的替代解决scheme开始。

我目前在学习项目中使用的解决scheme(一个基于socket.io的聊天,还有什么?)正在使用http服务器进行身份validation。
如果您无法在http服务器上获得有效的身份validation,则永远无法访问使用socket.io界面的页面。

通过读取一些POST数据来处理http服务器上的用户authentication。 只有当POST数据是有效的用户数据时,用户才允许移动到socket.io接口所在的聊天。