【问题标题】:How to persist additional data added on fly in Passport sessions如何持久保存在 Passport 会话中动态添加的其他数据
【发布时间】:2015-01-08 23:01:39
【问题描述】:

我有一个基于 Node.js 之上的 Passport.js 构建的简单身份验证系统。我有一个用例,我需要在会话中保留组织 ID,该会话将在命中特定路由时更新。 我使用中间件做到了这一点:

app.use('/switchOrganization',function(req, res, next) {
    if(req.user) req.session.passport.user.activeOrg = 'my org';
    next();
});

但这不会将数据保留在其他路由中:

app.route('/someRoute').post(function(req,res){
    console.log(req.session.passport.user);
});

它不包含“activeOrg”值。我哪里出错了?

【问题讨论】:

  • 查看我的编辑。这是一个错误!

标签: node.js backbone.js express passport.js


【解决方案1】:

用户对象在deserializeUser函数中反序列化为req.user每个请求都会发生这种情况。因此,如果您在其中一个路由处理程序中对 req.user 进行更改,并希望它为跟随它的路由处理程序保留,那么只会出现这种情况对于该特定请求。如果 /someRoute 被重新请求,它不会有您在另一个路由中所做的更改,而这些更改没有在新请求中调用。

您应该将更改持久化到数据库,以便在为下一个请求调用 deserializeUser 函数时,它会从一开始就拥有您的数据。

【讨论】:

  • 这只是我想在会话中保留的临时数据。必须有某种方法可以在会话中保存数据,直到会话持续。没有?
  • 在这种情况下,只需将其存储在req.session github.com/expressjs/session#reqsession
猜你喜欢
  • 2013-12-21
  • 2016-02-09
  • 2017-04-19
  • 2013-04-07
  • 2015-02-21
  • 2018-12-13
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多