【问题标题】:nodejs express req.session not storing my variablenodejs express req.session 不存储我的变量
【发布时间】:2012-11-19 04:12:45
【问题描述】:

我正在设置一个基本的管理员身份验证,当用户登录时,我在 authcallback 中调用此函数:

function checkAdmin (req) {
  Admin.findOne( { user : req.user.id },function ( err, admin, count ){
    req.session.isAdmin = true;
    console.log("session : %j",req.session);
  })
}

然后我做

res.redirect('/')

索引控制器内的代码:

console.log("session : %j",req.session);
  res.render('index', { title: 'Accueil',message: req.flash('info') });

这就是我在控制台中得到的:

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path"
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{},"isAdmin":true}

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path"
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{}}

我不明白为什么会话不存储 isAdmin 值。

我读过一些其他问题,说 app.use(app.router) 位置可能是一个原因,但我确实这样做了:

app.use(cookieParser)
app.use(express.session({store: session_store }));
app.use(passport.initialize())
app.use(passport.session())


// routes should be at the last
app.use(app.router)

我猜这一定是个白痴..

【问题讨论】:

  • 也许这样的事情会有所帮助:req.session.regenerate github.com/senchalabs/connect/issues/681
  • 所以这意味着每次我想在会话中更改/添加一个变量时我都必须使用 req.session.regenerate ?
  • 也许你应该在 checkAdmin 函数中进行重定向。
  • 我同意,我不知道regenerate 做了什么。文档说:“要重新生成会话,只需调用该方法,一旦完成,新的 SID 和会话实例将在 req.session 初始化。”这与reload 有何不同?

标签: session express


【解决方案1】:

嗯,

我终于找到了为什么这不起作用。我在我的 Admin.findOne 函数之外做了 res.redirect。所以客户端在设置会话变量之前就被重定向了。

这个 authCallbackFunction 正在工作:

exports.authCallback = function (req, res, next) {
  //Check if the logged in user is an admin
  Admin.findOne( { user : req.user.id },function ( err, admin, count ){
    var old = req.session;
      if(!err && admin)
        req.session.isAdmin = true;
      res.redirect('/')
  })
}

当用户注销时,别忘了重新生成会话

// logout
exports.logout = function (req, res) {
  req.session.regenerate(function(){
    req.logout()
    res.redirect('/login')  
  })

}

【讨论】:

  • 是的,当您来自“同步”编码世界时,这很难理解。也发生在我身上,你的 q/a 帮助我解决了这个问题。谢谢。
猜你喜欢
  • 2014-02-08
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2018-02-06
  • 2023-04-06
  • 2019-12-26
  • 2019-07-17
相关资源
最近更新 更多