В моем проекте я использую Angular 5, nodejs, JWT для подписи токенов и passport.js для управления аутентификацией (декодирование токенов).На стороне сервера аутентификация работает хорошо, когда я использую Angular Interceptor, который автоматически устанавливает заголовок при перехвате http-запроса.
Предполагается, что я обращаюсь к / user / profile, который является моим защищенным маршрутомв узле, если я напрямую наберу защищенный маршрут (полный URL http://localhost:3000/user/profile) в браузере, как я могу разрешить уже авторизованному пользователю получить доступ к этой странице вместо неупорядоченного сообщения из passport.js, которое, конечно, может 'я не вижу ни одного токена в заголовке (тело, ни запрос)?
Единственный способ, которым мне удалось это сделать, - создать этот маршрут:
router.get('/isauthenticated', passport.authenticate('jwt', {session: false}), function (req, res) {
res.json({
id: req.user.id,
email: req.user.email
});
});
и вызвать его в "ngOnInit" вProfileComponent. Если / isauthenticated проходит хорошо, тогда я позволяю пользователю посетить страницу профиля. Я думаю, что это решение - обходной путь и определенно не элегантный ... поэтому мой вопрос, кроме использования или не passport.js:
возможно ли использовать JWT-аутентификацию с Angular и защитить маршрут с помощью nodejs, а затем разрешить уже аутентифицированному пользователю (который имееттокен, который, конечно, не просрочен) для входа в защищенный маршрут, даже если он напрямую набирает URL в браузере?
Скажите, пожалуйста, даже если вы используете что-то еще вместо passport.js илиесли мне придется использовать другую стратегию.