如何将自定义登录的令牌传递给io连接?
所以基本上在我对用户进行身份验证之后,用户将获得令牌,但是如何将该令牌传递给socket.io连接并可能使用它。
这里是代码 - 这是在api.js
a = Convert.ToInt(b);
a = int.Parse(b);
a = Int32.Parse(b);
虽然这是在server.js
中function ensureAuthenticated(req, res, next) {
// I skip alot of codes for clarity
var token = req.body.token || req.query.token || req.headers['x-access-token'];
if (token) {
req.user = user;
return next();
}
}
//Login
router.post('/login', function(req, res) {
// I skip the mongoose part for clarity
var token = createToken(user);
res.json({
success: true,
message: "Successfully login",
token: token
});
});
正如您所知,如果我必须设置用户名对象,我必须io.on('connection', function(socket) {
socket.broadcast.emit('user joined', {
username: socket.username,
numUsers: numUsers
});
socket.on('typing', function() {
socket.broadcast.emit('typing', {
username: socket.username
});
});
socket.on('online', function() {
socket.emit('online');
});
socket.on('chat', function(msg) {
console.log("message: " + msg);
io.emit('chat', msg);
});
});
,以使用用户名对象。
如果我做用户名:req.user,它将返回错误。我是否必须在username: socket.username
中设置ensureAuthenticated
功能才能使用它?
答案 0 :(得分:1)
在任何传入套接字消息上,您可以通过以下方式访问套接字首次连接时存在的cookie:
socket.request.headers.cookie
因此,如果您的用户登录令牌位于cookie中,您可以从那里获取任何已连接的socket.io套接字。
您还可以使用socket.io中间件在连接时进行套接字身份验证,如下所示:Authentication with Node/Express/Socket.IO
socket.io doc here中的示例代码。
var io = require('socket.io')();
io.use(function(socket, next){
if (socket.request.headers.cookie) return next();
next(new Error('Authentication error'));
});