Wondermarin
@Wondermarin

Авторизация в React?

Пишу приложение на React, начал реализовывать авторизацию, но столкнулся с некоторыми трудностями, прошу у более опытных людей в этом вопросе помощи.
Есть header у сайта с кнопкой "Войти", она переводит пользователя на сторонний сервис, где этот самый пользователь должен авторизовать приложение (технология OAuth2 проще говоря). После того, как пользователь авторизует приложение, его вернет на страницу /login?code={code}, с помощью этого кода у сервиса уже можно будет получить токен доступа, и далее произойдет редирект на страницу /dashboard. Но тут и случаются проблемы, т.к. /dashboard - защищенный роут, то при редиректе (а он происходит моментально) пользователя снова выкидывает на главную, ибо приложение еще не успело получить токен и в Redux Store не обновилось поле IsLoggedIn.

На эти вопросы меня интересуют ответы:
1. Возможный ответ со страницей /login? Заставить приложение ждать получение токена перед редиректом, а во время ожидания повесить заглушку по типу "Происходит авторизация..."?
2. Что делать в том случае, когда пользователь будучи авторизованным обновит страницу /dashboard? Его токен сохранен в LocalStorage, но получение информации о владельце токена занимает время, из-за которого происходит преждевременный редирект на главную, ибо в этот момент IsLoggedIn все еще false.

Заранее благодарю за любые ответы.
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
nakree
@nakree
Frontend Developer
1. Добавить статус авторизации в redux. В компоненте если статус === REQUEST, то показывать заглушку, если процес авторизации завершился, то при статусе SUCCESS/FAILURE сделать редирект куда нужно.
2. Этот вопрос так же решается статусом. Так же нужно в момент инициализации приложения отправить запрос на авторизацию если есть токен в localStorage.

P.S. Для проверки логина пользователя на определенном роуте можно сделать враппер или HOC который будет чекать статус, показывать прелоадер или нужный роут.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы