Я пытаюсь добавить роль с именем admin для аутентификации администраторов, вошедших в веб-приложение панели мониторинга, в то время как обычный пользователь может просто получить доступ к обычным страницам.
Для обычного пользователя мне требуется паспорт в server.js
like
// use passport
app.use(passport.initialize());
require("./config/passport")(passport);
В config/passport.js
, как и в коде официального примера, я пытаюсь это сделать:
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require('mongoose');
const User = mongoose.model("users");
const key =require("../config/key");
const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = key.secretKey;
module.exports = passport => {
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
// console.log(jwt_payload);
User.findById(jwt_payload.id)
.then(user => {
if(user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => console.log(err));
}));
};
Этот способ отлично работает, и я использую их в маршруте
router.get("/current", passport.authenticate("jwt", {session: false}), (req, res) => {
res.json({
id: req.user.id,
name: req.user.name,
username: req.user.username,
email: req.user.email,
avatar: req.user.avatar,
});
})
Однако, пока я добавляю роль в правило токена:
const rule = {id:admin.id, email: admin.email, avatar: admin.avatar, admin: admin.admin};
Как проверить, является ли свойство admin истинным для запроса различных коллекций в passport.js
Я попробовал это, но у меня не работает с ошибкой, похоже, сервер запускается дважды:
module.exports = passport => {
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
// console.log(jwt_payload);
if(jwt_payload.admin){
Admin.findById(jwt_payload.id)
.then(user => {
if(user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => console.log(err));
} else {
User.findById(jwt_payload.id)
.then(user => {
if(user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => console.log(err));
}
}));};
Ошибка: Ошибка