这是我的isAuthenticated
功能:
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect('/');
};
这是使用PassportJs isAuthenticated()
函数渲染视图的路径。
router.get('/', isAuthenticated, function (req, res, next) {
res.render('dashboard');
});
此isAuthenticated
函数将为所有登录用户呈现该视图。同样,我希望管理员用户只能访问其他一些视图。在这种情况下,我可以使用相同的功能来实现这一目标,而不是创建单独的策略或功能吗?
比如将用户角色作为isAuthenticated
函数的参数提供,并在函数内进行额外检查,以检查请求中的用户对象是否具有参数中提供的相同角色?或者任何其他类似的方法来避免编写另一个单独的函数/策略?什么是首选&最好的方法?如果有人能详细解释,我将不胜感激。
答案 0 :(得分:1)
Passport将用户信息存储在会话中,并使用这两个会话来序列化和反序列化用户,
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('/');
}
};