用户使用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接口所在的聊天。
- Express.js Passport身份validation会自动跳过策略
- 使用react-dev-tools黑客authentication
- 使用nano插入用户时,CouchDB会抛出“404丢失”错误
- 基于REST / Web的身份validation即服务的可能性?
- 什么是更好的方式来validationExpress 4路由器上的一些路由?
- 将非用户字段添加到有效内容以用于JWT令牌
- PassportJsauthentication无限循环和执行(默认)查询
- firebase是否为每个admin.auth()。verifyIdToken(idToken)发出networking请求?
- 简单的RESTauthentication策略?