我正在设置一个基本的管理员身份验证,当用户登录时,我在authcallback中调用此函数:
function checkAdmin (req) {
Admin.findOne( { user : req.user.id },function ( err, admin, count ){
req.session.isAdmin = true;
console.log("session : %j",req.session);
})
}
Run Code Online (Sandbox Code Playgroud)
然后我做
res.redirect('/')
Run Code Online (Sandbox Code Playgroud)
索引控制器内的代码:
console.log("session : %j",req.session);
res.render('index', { title: 'Accueil',message: req.flash('info') });
Run Code Online (Sandbox Code Playgroud)
这就是我在控制台中得到的:
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":{}}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会话不存储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)
Run Code Online (Sandbox Code Playgroud)
它一定是那种白痴我猜...
好,
最后我发现为什么这不起作用.我在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('/')
})
}
Run Code Online (Sandbox Code Playgroud)
当用户注销时,不要忘记重新生成会话
// logout
exports.logout = function (req, res) {
req.session.regenerate(function(){
req.logout()
res.redirect('/login')
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13087 次 |
| 最近记录: |