Внедрите токен refre sh в реагирующем нативе с помощью Redx Saga - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть промежуточное ПО redux-saga для облегчения асинхронных операций c, и все вызовы API выполняются через sagas. Теперь реализуем OAuth2, Я хочу проверить, не истек ли мой токен, затем перед обновлением переопределить его sh с помощью токена refre sh. Проблема в том, что я не могу найти решение перехватить сагу, чтобы сделать это. Мое значение expiresAt находится в состоянии хранилища, и его следует использовать для принятия решения об истечении срока действия токена доступа.

То, что я хочу построить

Перехватчик, который запускается перед каждой сагой и позволяет получить доступ к состоянию избыточности, а также запускать действия избыточности. Чтобы я мог получить доступ к expiresAt из магазина, чтобы сравнить его с текущим временем и датой, а затем, если срок действия токена истек, запустите refre sh api, чтобы обновить его sh, а затем отправьте действия магазина, и тогда настоящая сага сможет работать с обновленным токеном. .

Подходы, найденные до сих пор:

  1. с использованием effectMiddleWares : Это не раскрывает состояние избыточности или позволяет выполнять эффекты саги внутри, так как это не генератор (работник)
  2. Использование подстановочного действия : пытался работать с этим, но это не гарантирует, что рабочая сага, предназначенная для порождения для инициируемого действия, ждет, пока эта сага с подстановочными знаками будет выполнена первой .
  3. Использование глобального состояния для хранения expiresAt и помещение лога c token refre sh на сетевом уровне, т. е. прошлые саги : я не убежден в этом.

Любая помощь приветствуется. Кроме того, если я не думаю в правильном направлении с проблемой, пожалуйста, дайте мне знать о правильном способе сделать это. Может быть без саги.

1 Ответ

1 голос
/ 12 февраля 2020

Я могу предложить использовать отдельную функцию генератора, которая будет обновлять токен sh в фоновом режиме. Процесс будет выглядеть так:

  1. Токен начисляется какой-то сагой, скажем, login. Он отправит действие LOGIN_SUCCESS для сохранения токена в Redux.
  2. Другая сага, скажем, refreshToken будет прослушивать LOGIN_SUCCESS действия и запускать таймер. Когда таймер истекает, он либо обновляет sh токен, либо отправляет действие для саги, которая будет делать токен refre sh.
  3. После успешного обновления токена sh будет отправлено LOGIN_SUCCESS, что приведет нас к шагу 2.

В результате токен всегда будет обновляться, и пользователь будет не возникают задержки при выполнении операций.

В качестве дополнительной проверки вы можете использовать частные маршруты для автоматического выхода пользователя из системы в случае сбоя токена sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...