bek*_*ite 7 authentication node.js socket.io
我在本教程中提到了红色:http://howtonode.org/socket-io-auth.它显示了如何使用express和socket.io对用户进行身份验证.但是有没有办法只使用socket.io来验证用户而不需要表达?
编辑:
对于会话处理,我使用RedisStore(https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO).剩下的是创建身份验证cookie的模块.有没有人知道我可以使用socket.io实现创建一个身份验证cookie,就像你可以处理会话一样?
我知道这有点旧,但对于未来的读者,除了解析cookie和从存储中检索会话的方法(例如passport.socketio)之外,您还可以考虑基于令牌的方法.
在这个例子中,我使用非常标准的JSON Web Tokens.您必须向客户端页面提供令牌,在此示例中,假设一个返回JWT的身份验证端点:
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});
});
Run Code Online (Sandbox Code Playgroud)
现在,您的socket.io服务器可以配置如下:
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');
});
Run Code Online (Sandbox Code Playgroud)
socket.io-jwt中间件期望查询字符串中的令牌,因此从客户端您只需在连接时附加它:
var socket = io.connect('', {
query: 'token=' + token
});
Run Code Online (Sandbox Code Playgroud)
我在这里写了一个关于这个方法和cookie的更详细的解释.
| 归档时间: |
|
| 查看次数: |
10777 次 |
| 最近记录: |