我正在使用ElephantJS进行NodeJS / express应用程序的登录/注册。我已经为所有用户定义了一个用户模型,但是只希望管理中的某些用户有权编辑某些模型。我当时想添加一个布尔型字段(例如 isAdmin )来确定这一点,但是我不知道如何验证管理员用户。具体来说,如何确定何时需要为管理员用户生成令牌?我该如何区分管理中的用户和普通用户?
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:0)
您可以做的是在登录时将字段添加到JWT有效负载中,然后执行一个中间件功能来检查该内容作为路由的第二个参数...
所以我们说这是您的架构User.js
:
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true,
minlength: 5,
maxlength: 50
},
email: {
type: String,
required: true,
minlength: 5,
maxlength: 255,
unique: true
},
password: {
type: String,
required: true,
minlength: 5,
maxlength: 1024
},
isAdmin: Boolean
});
这是生成JWT令牌的地方:
userSchema.methods.generateAuthToken = function() {
return jwt.sign({ _id: this._id, isAdmin: this.isAdmin }, config.get('jwtPrivateKey'));
}
这里是检查isAdmin是否为真的中间件:
module.exports = function (req, res, next) {
if (!req.user.isAdmin) return res.status(403).send('Access denied.');
next();
}
然后您可以将其作为路由处理程序的第二个参数...因此,对于PUT来说,它类似于:
router.put('/:id', [auth, isAdmin, any other middleware...], async (req, res) => {
// handle the route...
});