这是我的 isAuthenticated
函数:
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect('/');
};
这是使用 PassportJs isAuthenticated()
函数渲染 View 的路线。
router.get('/', isAuthenticated, function (req, res, next) {
res.render('dashboard');
});
此 isAuthenticated
函数将为所有登录用户呈现该 View 。同样,我想要一些只有管理员用户才能访问的其他 View 。在这种情况下,我可以使用相同的函数来实现此目的,而不是创建单独的策略或函数吗?
喜欢将用户 Angular 色作为参数提供给 isAuthenticated
函数,并在函数内进行额外检查以检查请求中的用户对象是否与参数中提供的 Angular 色相同?或者任何其他类似的方法来避免编写另一个单独的函数/策略?另外,首选和最佳方法是什么?如果有人能详细解释一下,我将不胜感激。
最佳答案
Passport 将用户信息存储在 session 中,并使用这两个 session 来序列化和反序列化用户,
passport.serializeUser(function (req, user, done) {
//Check user permission here and assign to user object.
//user.permission = "user_permission"
return done(null, user);
});
passport.deserializeUser(function (req, user, done) {
done(null, user);
});
在您的身份验证函数中,您可以检查权限,
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()){
if(req.user.permission === 'user_permission'){
//route for admin
}else{
//rote for non-admin
}
}else{
res.redirect('/');
}
};
关于javascript - 使用 'passport.isAuthenticated()'检查Nodejs中的多个用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41342723/