svisch
@svisch

Как лучше аутентифициоровать пользователя в React js?

Добрый день. Поделитесь пожалуйста практиками аутентификации на React (хотя думаю фреймворк в данном случае не важен) с бэкэндом PHP (в моем случае Symfony).
Давайте я расскажу, как я сделал и как я вижу более правильно. После чего буду ждать комментов и советов по каждму из способов или совета о координально другом подходе.
1. Как у меня реализовано сейчас
В Symfony реализована стандартная аутентификация по логину и паролю. React отправляет POST запрос и если все ок, то на бэкэнде аутентифицируем пользователя. Со стороны реакта записываем данные пользователя (например его имя) в хранилище Redux. В UI для наглядности, что пользователь залогинен выводим в верхнем меню справа (вместо ссылок для входа и регистрации).
Разлогинивание - (запрос к api/logout) и удаление из Redux данных о юзере.
Если в какой то момент на бэкэнде пользователь окажется разлогиненым (например протухнет сессия), то с запросом возвращаем 401 ошибку и обрабатываем ее, удаляя из Redux данные о пользователе.
- из минусов вижу только то, что после разлогинивания на бэкенде, пользователь будет еще какое-то время залогинен на фронте (визулально), до тех пор пока не будет отправлен очередной запрос на сервер.
2. Аутентификация с JWT без сторонних сервисов (тут могу ошибаться)
Итак, логинимся по форме с логином и паролем, на сервере проверяем и выдаем клиенту JWT и также записываем инфу в Redux. При навигации по приложению React постоянно на клиенте проверяем не протух ли JWT. Если протух - то делаем запрос на сервер и обновляем JWT. При невозможности обновления (отсутствует аутентификация на бэкэнде) разлогиниваем на фронте удаляя информацию о пользователе из Redux.
3. Хранение инфы о пользователе в Redux? Хотелось бы еще узнать насколько правильное решение хранить информацию о пользователе, свидетельствующую об аутентефицированном пользователе в хранилище Redux?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
@onekrugoikov
Как лучше понятие растяжимое =)

Рекомендую использовать все таки JWT авторизацию:
1) Отправляем на сервер email и пароль.
2) На сервере идентифицируем пользователя и генерируем токен в который зашиваем id пользака.
3) В Response возвращаем какие то данные и токен и сохраняем его в куки (ВНИМАНИЕ! Не в localstorage, а именно в куки - так безопасней).
4) На клиенте зашиваем токен в заголовок: Authorization: Bearer <TOKEN>

В случае логаута:
1) Удаляем токен из куки
2) Редиректим пользака на страницу авторизации

Я в большинстве своих приложений вообще использую Kerberos.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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