Ответ 1
TL; DR
passport.authenticate
не устанавливает req.user
если вы предоставляете ему обратный вызов. Вы должны установить это самостоятельно.
Решение
Я смог воспроизвести ваше дело, и поведение проявилось, как ожидалось.
Чтобы исправить это, мне пришлось обновить ваше промежуточное программное обеспечение, например:
exports.isAuthenticated = (req, res, context) => {
return new Promise((resolve, reject) => {
return passport.authenticate('jwt',{session: false}, (err, user, info) => {
if(err) {
res.status(500).send({message: 'Internal Server Error'})
return resolve(context.stop);
}
if(user) {
req.user = user; // Manually set the user in req
return resolve(context.continue);
} else {
res.status(401).send({message: 'Unauthorized'})
return resolve(context.stop)
}
})(req, res);
});
}
Я вручную назначаю user
req.user
когда аутентификация прошла успешно. Это правильно устраняет проблему.
Почему это происходит?
Изучая исходный код паспорта, я замечаю, что функция passport.authenticate
будет замыкаться сама, если пользователь сам выполняет обратный вызов.
Это означает, что вы должны сами установить значение.