我使用的是Node.JS(0.10.28),Passport.JS(0.2.0)+ Passport-Google(0.3.0)和Passport.SocketIO(3.0.1)。
目前,我可以使用req.user
在我的应用程序路径中访问Passport.JS创建的用户:
app.get('/profile', function(req, res) {
// send user data
res.send(req.user);
});
使用Passport.SocketIO,我也可以访问用户:
io.sockets.on('connection', function(socket) {
// get user data
console.log(socket.handshake.user);
//...
});
还可以修改req.user
和'保存'在req._passport.session.user.property = new_property_value
范围内使用app.get/post/all(...)
。然后,更新将显示在io.sockets.on(...)
用户对象中。
我的问题是:是否可以编辑和保存' socket.handshake.user
范围内的io.sockets.on(...)
,以便更新的用户会在req.user
的{{1}}中显示更改?我试过以下无济于事:
app.get/post/all(...)
答案 0 :(得分:2)
使用Socket.io-Sessions(由制作Passport.SocketIO的同一作者撰写)更改socket.handshake.user
中的io.sockets.on(...)
。
代码应如下所示:
// initialization ...
// ...
io.sockets.on('connection', function(socket) {
socket.handshake.getSession(function (err, session) {
// socket.handshake.user is now session.passport.user
socket.on(...) { ... }
// ....
// test username change
session.passport.user.username = 'foobar';
// save session
// note that you can call this anywhere in the session scope
socket.handshake.saveSession(session, function (err) {
if (err) { // Error saving!
console.log('Error saving: ', err);
process.exit(1);
}
});
});
});
//...
app.get('/profile', function(req, res) {
// send user data
res.send(req.user); // returns {..., username: 'foobar', ...}
});