从节点js中的其他路由器访问会话令牌

时间:2018-01-28 02:23:55

标签: node.js express session

我尝试在路由中设置后,从其他路由访问我的会话令牌。我目前不成功。遵循三个文件的相关代码。

server.js:它调用路由恒温器,登录并设置会话令牌。

var session = require('express-session');
var app = express();

app.use(session({secret: 'keyboard cat',cookie: { secure: true }}))

var router = express.Router();
var thermostats = require('./api/routes/thermostats')(router, app, session);
require('./api/routes/login')(router, app, session, thermostats);

login.js:当用户转到localhost:3000/login/时,登录令牌需要保存在会话中

module.exports = function(router,app, session, thermostats){
    router.get('/login/', function(req, res) {
        list(req, res)        //response of this function has session which needs to be saved. 

        console.log(res.session)

        app.use(session(res.session))   //trying to save the res.session as session token 
    });

}

thermostat.js:在显示任何信息之前需要访问会话令牌。

module.exports = function(router,app){
    router.get('/thermostats/', function(req, res) {

        console.log(req.session) //Set to default/null values and not the updated session values
    });

}

它可能很小但我无法弄清楚这个问题。我将不胜感激任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

Express-session应根据配置自动保存会话。

看着' resave'快递会话docs中的配置选项:

  

重新保存

     

强制将会话保存回会话存储,即使在请求期间从未修改过会话也是如此。根据   在你的商店这可能是必要的,但它也可以创造种族   客户端向服务器发出两个并行请求的条件   并且在一个请求中对会话所做的更改可能会被覆盖   当另一个请求结束时,即使它没有发生任何变化(这种行为   还取决于你正在使用的商店。

这是默认情况下的,因此它应该已经开始工作而无需添加app.use(session(res.session)

编辑:您可以通过向req.session对象添加字段来保存到会话中:

router.get('/login/', function(req, res) { 
  getDataFromExternalApi(req, function(err, apiResponse) {
    var data = apiResponse.data;
    req.session.data = data;
    // if resave option is true, this should automatically save to the session store after this request is done.
  });
});

通常,您不应在请求处理程序中使用app.use。这些通常保留用于设置服务器,因为它定义了中间件表达的用途。