我有一个使用express,socket.io 1.0和passport的节点应用程序。当用户通过passport-twitter进行身份验证时,我使用以下代码将其信息存储在会话存储中;
var passportSocketIo = require("passport.socketio");
var MemoryStore = express.session.MemoryStore
,sessionStore = new MemoryStore();
io.set('authorization', passportSocketIo.authorize({
cookieParser: express.cookieParser,
key: 'express.sid',
secret: 'secret',
store: sessionStore
}));
然后我将以下内容用于我的socket.io连接处理程序;
io.on("connection", function(client){
console.log(sessionStore.sessions[client.request.sessionID]);
});
这将返回具有此格式的ID的客户端的所有会话数据;
{
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
},
"passport": {
"user": {
"id": "XXXXXXXXXX",
[...],
[...]
}
}
}
问题在于,如果我试图访问"护照"从结构来看,结果总是未定义的。我尝试了以下内容(无论有没有.
之前"护照");
不幸的是,这些返回为undefined。我真的只是想从该结构中获取passport.user.id
字段值,以便我可以执行一些数据库查找(例如用户组,用户隐私设置等),因此我可以确保发出正确的数据库数据回到客户端。
有什么想法吗?
答案 0 :(得分:0)
进一步研究后,看来通过JSON.parse()
是正确的使用方法;
var jsobj = JSON.parse(sessionStore.sessions[client.request.sessionID]);
console.log(jsobj.passport.user.id);
或单线解决方案;
console.log(JSON.parse(sessionStore.sessions[client.request.sessionID]).passport.user.id);