为什么req.session保存在sessionStore中以及如何从sessionStore访问值

时间:2014-05-02 14:04:27

标签: node.js express session-cookies

我在node.js中使用express + passport.js. 并希望确保我的RestAPI。我已将会话中的令牌设置为:

saveUser = function (req, res) {  
User.findOrCreate({ user_id: req.body.user_id, user_name: req.body.username })
     .success(function(result){
       req.session.token = 'dfgsfd4g564fg456d4gsgsdfg4';
       res.send({status:"ok"});
     }).error(function(error){
         res.send(error);
     }); };

但这是在req.sessionStore.sessions中设置的原因。 并且每次更改密钥以便如何从req.sessionStore.sessions访问令牌。?

 sessionStore: 
   { sessions: { E8DRcn3lWkTfAJb3FsPnoeaF: '{"cookie":{"originalMaxAge":null,"expires":null,"secure":true,"httpOnly":true,"path":"/"},"passport":{},"username":"testing.user","token":"3iqZ31YdUaTtyvI6"}' },
     generate: [Function],
     _events: { disconnect: [Function], connect: [Function] } },
  sessionID: 'Ykl9ONPvbxsTOa9Fonb6GFEP',
  session: 
   { cookie: 
      { path: '/',
        _expires: null,
        originalMaxAge: null,
        httpOnly: true,
        secure: true },
     passport: {} },

我的app.js文件中的此配置。

app.configure (function () {
  app.use (express.cookieParser()); 
  app.use (express.bodyParser ());
  app.use (express.methodOverride ());
  app.use (express.session({ secret: 'secret_code' })); // session secret
  app.use (flash());
  app.use (express.json());
  app.use (passport.initialize());
  app.use (passport.session());
  app.use (express.static(path.join(__dirname, 'public')));
  app.set ('view engine', 'ejs');
  app.use (app.router);
});

先谢谢。

1 个答案:

答案 0 :(得分:1)

您不应该与sessionStore交互,您始终可以在req.session中按会话级别访问您的会话。

所以,要设置一个令牌,你就做对了:

req.session.token = 'some token';

并在后续请求中访问它,即。在身份验证中间件中,您可以检查req.session.token,如下所示:

function someMiddleware(req, res, next) {
    if(req.session && req.session.token) {
        User.validateToken(req.session.token, function(err, valid){
            if(!err && valid) {
                next();
            } else {
                next(new Error('Token not valid.'));
            }
        }); // or something like that
     } else {
        next(new Error('No session token');
     }
};

我不确定,但我认为即使是护照也会通过其策略做出类似的事情。