Next.js vs Django, refresh token через axios interceptor
В связке Next.js и Django auth-логика часто начинает течь не на login, а позже, когда access token уже живет своей короткой жизнью. Если refresh делать вручную из компонентов, страниц или отдельных запросов, приложение быстро обрастает повторяющейся логикой. Где-то токен обновили, где-то забыли, где-то UI уже считает пользователя авторизованным, а API отвечает 401.
Рабочая развилка - refresh не должен жить в UI. Его лучше увести в единый auth client, который работает через axios interceptor. Тогда запрос сначала проверяет access token, при необходимости идет в Django за новым, подставляет его автоматически и повторяет исходный вызов. А если refresh уже недействителен, сессия закрывается корректно и без подвешенного состояния. Получается не ручная возня с токенами по всему приложению, а один предсказуемый auth-поток.
Статья на Хабр Витрина проекта: AI Chat github Проект: AI Chat Stepik: AI на Django и Next II
#nextjs #NextAuth #Django #DjangoRESTFramework #JWT #OAuth #Axios #TypeScript #Fullstack #authentication
· 10.05
Мы делали похожее но добавили ещё один нюанс - очередь запросов пока идёт рефреш. Без неё при параллельных запросах получаешь несколько рефрешей одновременно и первый же валидный токен инвалидирует остальные. Решается через один Promise который разделяется между всеми запросами в очереди.
ответить
коммент удалён
· 11.05
Хорошее дополнение про очередь запросов. Параллельные запросы возникают, когда компоненты на странице независимо друг от друга вызывают защищённые API, например, useEffect в нескольких блоках одновременно. Без очереди каждый из них видит протухший access token и запускает свой refresh, первый обновляет токен, остальные получают invalid refresh и разлогинивают пользователя. Да, решается единым refreshPromise, на который вешаются все ожидающие запросы
ответить
ответ удалён