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
сама замкнется, если пользователь сам обратный вызов предоставит.
Это означает, что вы должны установить значение самостоятельно.