javascript - 如何在nodejs中实现passportjs中的用户角色

标签 javascript node.js express passport.js

如何使用expressjs和passport在nodejs中实现基于 Angular 色的授权/访问控制以及如何完美设计 Angular 色中间件?

我有两种登录类型管理员用户

以管理员和用户的名义创建两个模型和路由器哪个最好?

1.检查用户是否isAdmin

2.

// To authtenticate the User by JWT Startegy
module.exports = (userType, passport) => {
    let opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
    opts.secretOrKey = config.secret;
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        if (userType == 'admin') {
            Admin.getAdminById(jwt_payload.data._id, (err, user) => {
                if (err) return done(err, false);
                if (user) return done(null, user);
                return done(null, false);
            });
        }
        if (userType == 'users') {
            User.getUserById(jwt_payload.data._id, (err, user) => {
                if (err) return done(err, false);
                if (user) return done(null, user);
                return done(null, false);
            });
        }
    }));
}

最佳答案

为什么你想要有2个地方来获取用户数据?

拥有用户并为其分配 Angular 色。

最简单的访问控制系统是:访客、登录、管理员。

因此,在表users 中添加一个role 列,其值为:user、admin。

现在你编写中间件:

const isLogged = function (req, res, next) {
   if (req.user)
     return next ();
   res.send ('unauth')
}
const isAdmin = function (req, res, next) {
   if (req.user.role == 'admin')
     return next ();
   res.send ('only admin')
}

及用法:

app.get('/', (req, res)=>{})
app.get('/profile',isLogged, (req, res)=>{})
app.get('/admin',isLogged, isAdmin, (req, res)=>{})

对于更高级的需求,请尝试查找一些 ACL 模块

关于javascript - 如何在nodejs中实现passportjs中的用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472167/

相关文章:

javascript - 将标记添加到谷歌地图,引用 map 但不重新实例化它

javascript - React-native:将事件传递给其他对象

javascript - 在 jquery 中的最后一个图像上停止图像 slider 前进按钮

javascript - 通过将键顺序作为字符串路径 JSON 来获取值

javascript - 使用 Google Feed API 和 Node.js 订阅 RSS feed

javascript - splice() 方法有效,但数组在执行后没有改变

javascript - 如何对多个查询使用异步并行

node.js - NPM 脚本中的跨平台管道命令

node.js - Express:读取流时出错

javascript - Nodejs Express 在 POST 上提供静态内容