Используете ли вы Redux && Redux thunk?
Если да, то я придерживался следующего подхода:
- Когда пользователь вошел в систему, я сохраняюполучить доступ и обновить токены в Магазине.
- Я использую redux-persist , чтобы сохранить токены в localStorage (есть и другое хранилище), чтобы сохранить их, когдаПользователь обновляет / повторно открывает приложение.
- Имеет промежуточное ПО, которое проверяет, остается ли токен доступа действительным перед каждым запросом API.
- Если срок его действия истек, попробуйте обновить токен доступа, используя токен обновления.
- Если срок его действия не истек, просто выполните запрос API.
- Если пользователь вышел из системы или оба токена истекли, то я очищаю Хранилище (и localStorage также через redux-persist).
Более подробно, для вышеуказанного потока, вы можете проверить в оригиналеответ (откуда я взял вдохновение): https://stackoverflow.com/a/36986329/4312466
Если вы не используете какие-либо библиотеки управления состоянием:
Это вариант следовать приведенной выше идее,но вместо хранилища, промежуточного программного обеспечения и использования redux-persist вы можете:
- Сохранить токены в
localStore
. - Создать слой (класс, функцию или любой другойвы хотите) в вашем приложении, которое будет действовать как промежуточное ПО.Каждый раз, когда вы хотите вызвать API, вы сначала вызовете этот слой, который проверит, является ли токен действительным:
- И если это так, только тогда вызовет запрос API.
- Еслисрок действия токена истек, этот слой будет хранить все дальнейшие запросы API в очереди, пытаясь обновить токен.
Однако, если вы выполняете SPA и имеетесложные операции с состоянием, я рекомендую вам использовать библиотеку управления состояниями.