【发布时间】: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有何不同?