使用'passport.isAuthenticated()'检查Nodejs中的多个用户角色

时间:2016-12-27 09:44:32

标签: javascript node.js express passport.js passport-local

这是我的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函数的参数提供,并在函数内进行额外检查,以检查请求中的用户对象是否具有参数中提供的相同角色?或者任何其他类似的方法来避免编写另一个单独的函数/策略?什么是首选&最好的方法?如果有人能详细解释,我将不胜感激。

1 个答案:

答案 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('/');
  } 
};