我正在使用passport-jwt来验证对express.js中给定路由的访问,然后将 Sequelize 模型返回给最终控制器。代码如下所示:
授权策略:
const passportStrategy = passport => {
const options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: config.auth.ACCESS_TOKEN_SECRET
};
passport.use(
new Strategy(options, async (payload, done) => {
try {
const user = await User.findOne({ where: { email: payload.email }});
if (user) {
return done(null, {
user
});
}
return done(null, false);
}
catch (error) {
return done(error, false)
}
})
);
};
带有 auth 中间件的路由
router.get('/:user_id/psy', passport.authenticate('jwt', { session: false }), patientsController.getPatientPsy);
控制器功能
const getPatientPsy = async (req, res) => {
const authenticatedUser = req.user;
if (authenticatedUser.userType !== "patient") {
res.status(500).send("Big time error");
}
}
如果我console.log(authenticatedUser)
在getPatientPsy()控制器中成功打印 Sequelize 模型及其dataValues等等,但是当我尝试访问任何属性时,无论是userType还是任何其他属性,它都会始终返回undefined。
在passport-jwt身份验证中,一旦找到与提取的JWT令牌匹配的用户,afaik就会同步返回并使其在req.user对象中可用,我可以使用console.log打印它,但为什么不能我访问模型的属性?
我试图让getPatientPsy()控制器成为同步功能,但它也不起作用。
谢谢你。