Comments 7
Также можно и готовые адаптеры использовать, например для keycloak есть его готовый, с апдейтами и прочим:
https://www.npmjs.com/package/keycloak-js
А так смысл правильный. Иногда ещё бывает надо добавлять апдейты на активации окон/вкладок, а не только при запросах
Вместо await refreshAccessToken();
можно было просто использовать кеш await (refreshAccessTokenPromise ??= refreshAccessToken());
, и после await сбрасывать его. Очередь на микротасках организует рантайм бесплатно.
Правильный сценарий
Вернёмся к моменту, когда мы проверяем наличие токена:
Так, вроде, сценарий был правильный. Вот эта штука refreshAccessToken();
возвращает промис и этот промис должен быть одинаковый для всех запросов. И тогда получается очередь из запросов, которые ждут разрешения этого промиса.
Здравствуйте, interseptor подразумевает выполнение каких либо действий до или после запроса. Если использовать первый сценарий, то при отправке сразу нескольких запросов и отсутствии access-token, будет соответственно отправлено три запроса на получение access-token, так как в момент отправки их действительно нет.
Полезная тема. Я сталкивался с такой ситуацией. Решил при помощи очереди. Вы предлагаете использовать стороннюю библиотеку. Можете хотя бы подробнее рассказать про неё, её внутренности? А то получается "рисуем сову: рисуем 2 круга, дорисовываем остальное".
Работа с JWT-токенами в браузере без боли и страданий