为什么我不能访问护照'会话中的字段存储JSON?

时间:2014-06-12 20:36:28

标签: json node.js session

我有一个使用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",
            [...],
            [...]
        }
    }
}

问题在于,如果我试图访问"护照"从结构来看,结果总是未定义的。我尝试了以下内容(无论有没有.之前"护照");

  • sessionStore.sessions [client.request.sessionID]。[护照]
  • sessionStore.sessions [client.request.sessionID] ["护照&#34]。
  • sessionStore.sessions [client.request.sessionID] .passport
  • sessionStore.sessions [client.request.sessionID]"护照"

不幸的是,这些返回为undefined。我真的只是想从该结构中获取passport.user.id字段值,以便我可以执行一些数据库查找(例如用户组,用户隐私设置等),因此我可以确保发出正确的数据库数据回到客户端。

有什么想法吗?

1 个答案:

答案 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);