我目前正在开发一个具有多个用户模式的项目,因为管理员、教师、学生都是具有不同结构的不同模式。结构很糟糕,但是所有的api都不能真正改回来。
所以问题是这里的用户身份验证是由护照和 jwt 配置的。但它只为教师配置。
const Teacher = require("../models/Teacher");
const User = require("../models/User");
const { SECRET } = require("../config");
const { Strategy, ExtractJwt } = require("passport-jwt");
const opts = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: SECRET
};
module.exports = passport => {
passport.use(
new Strategy(opts, async (payload, done) => {
await Teacher.findById(payload.user_id)
.then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => {
return done(null, false);
});
})
);
};
但我也需要其他两个模式。当我为其他人测试 api 时,我只需等待 Teacher.findById(payload.user_id) 将 Teacher 更改为 User 并且它与 api 的 userAuth 一起使用,否则它会按预期未经授权。请建议我一种方法,我可以同时将它应用于所有三个模式,而无需一次又一次地更改它。