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

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

这是我的 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/

相关文章:

node.js - 从 NodeJS/Angular 应用程序直接向 couchDB 发送请求?

arrays - 将文档推送到 Mongoose 模型数组中的子文档中

node.js - 文件上传适用于 postman ,但不适用于 Angular2

javascript - “Uncaught SyntaxError: Unexpected identifier”

node.js - 我这个 GraphQL 查询做错了什么?

node.js - 多部分/表单数据到 azure blob

node.js - 使用 mongoose 根据条件 mongodb 填充或不填充

javascript - 字数组转字符串

javascript - 如何在页面加载时从表加载一定数量的行,并且仅在用户加载它们时才加载更多行?

javascript - 上传前如何调整图片大小