@Mashush

Как правильно писать запросы к API для авторизации?

Пытаюсь реализовать авторизацию с использованием JWT токенов. Проблему, скорее всего, смогу описать и без кода, поскольку она, скорее всего, крайне банальна, но все равно хочу спросить.

Мое react приложение используется вместе с redux. В redux хранится состояние personData, которое состоит из двух полей - isAuth и person (объект с данными о пользователе).

При регистрации и логине я отправляю запрос на сервер (express + mongoose). Я создаю DeviceModel, к которому, собственно, и привязываю id пользователя и refreshToken. Таким образом я реализую функционал, который позволяет пользователю заходить с разных устройств. В куки записываю refreshToken и deviceId. Все это проходит успешно и на клиент я получаю такие вот данные:

{
    person,   // {fullname, email, ...}
    tokens,   // {accessToken, refreshToken}
    deviceId // unique device id
}


Все это прекрасно работает, состояния изменяются. НО, что я делаю дальше.

При обновлении страницы я проверяю есть ли в localstorage accessToken. Если он там есть - отправлю запрос на обновление токенов, чтобы пользователь получил снова свежие токены

При запросе цепляются куки - deviceId и refreshToken. В этот момент в базе данных имеется Device-документ с точно таким же _id и refreshToken. НО, что в данном случае не работает))

На сервере ищется документ по deviceId (находится), проверяется refreshToken (валиден), а затем проверяется, что у найденного device поле refreshToken совпадает с тем, что я достал из куки.

И тут все проваливается, но не по причине какой-то ошибки на сервере, а по причине того, что у меня дублируется запрос - у меня проходит ДВА запроса на обновление токенов. Первый неудачный, который возвращает 401 статус, и видимо затем отправляется второй запрос - уже удачный

но я не понимаю, почему их отправляется два и как это работает)

* запрос на обновление отправляю с помощью useEffect(() => {....}, []) внутри App компонента
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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