nodejs表示req.session没有存储我的变量

时间:2012-11-30 21:52:43

标签: session express

我正在设置一个基本的管理员身份验证,当用户登录时,我在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)

我猜它一定是个白痴......

1 个答案:

答案 0 :(得分:7)

那么,

最后我发现为什么这不起作用。我在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')  
  })

}