Правильная реализация JWT

Я разрабатываю веб-сайт с помощью django rest framework, django rest framework jwt для бэкэнда и next.js, react, redux для внешнего интерфейса.

С предположением,

  • хранить токен доступа в виде файлов cookie, а не в localStorage. Потому что я использую Next.js и хочу получить токен доступа перед первоначальным рендерингом.

  • JWT с Фреймворк Django REST JWT Поиск Гитхаб

  • Когда пользователь входит в систему, серверная часть отправляет токен доступа в виде файлов cookie.

  • истечение срока действия токена доступа и обновление, как показано ниже

'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_COOKIE': 'token'

На основании вышеизложенного у меня есть несколько вопросов.

  1. Когда и как обновить токен

токен доступа истекает через 5 минут. В течение 5 минут пользователь может запросить страницу, на которой есть permission_classes = (IsAuthenticated,) с токеном доступа. Если прошло 5 минут, файлы cookie (токен доступа) автоматически исчезнут, и пользователю потребуется снова войти в систему. Чтобы этого избежать, существует система токена обновления, верно? Если это правильно, когда и как обновить токен правильно? Перед запросом к бэкэнду с токеном доступа всегда сравнивайте срок действия токена доступа с текущим временем, затем, если он скоро истечет, прекратите запрашивать один раз, сначала переключитесь на токен обновления с помощью axios, после получения нового токена перезапустите запрос с новым токеном. . Это правильный путь?

  1. токен доступа исчезнет, ​​если срок его действия истек

Потому что это печенье, верно? Например, после входа пользователя в систему и ухода с компьютера на 10 минут. Пользователь вернулся и пытается увидеть веб-сайт, но ему нужно снова войти в систему. Поскольку в файлах cookie больше нет токена доступа, а также нельзя обновить токен. Что я должен делать?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
391
1

Ответы 1

Вы можете использовать концепцию «перехватчика», например, она есть у аксиомы, вы можете добавить перехватчик ответа, и если сервер вернет специальную ошибку («token_expired»), то этот перехватчик будет обращаться к refresh-token API с помощью Refresh-токена что у него есть, получите новый токен доступа и повторите последний неудачный запрос.

Проверьте первый ответ здесь: https://github.com/axios/axios/issues/934#issuecomment-322003342

Надеюсь, это понятно.

Другие вопросы по теме