Comments 13
спасибо, надо было срочно сделать авторизацию для SPA, как раз из за многобукв не осилил тогда jwt
Тут, по идее, нужен не только access-токен, но и второй — refresh, чтобы была реализована ротация токенов.
Насчет генерации токена — ситуация похожа: для статьи, туториала, имхо, достаточно и этого. Быть может, когда-то созрею до продолжения, до усиления безопасности, ускорения и т.д.
Простите, но я так и не понял зачем писать токен в базу
Посмотрите на вашу последнюю (в статье) функцию
она просто берет токен из http запроса, декодирует из него user_id и проверяет есть ли такой user_id (а не токен) в базе и если такой user есть и активен, то запрос авторизован
И в самом начале посмотрите как токен генерится
там простой объект (dict) с двумя полями: id и exp
этот объект шифруется с помощью серверного SECRET_KEY и отдается клиенту для дальнейшего использования.
А клиент просто в каждый http запрос вставляет заголовок с токеном (вместо сессионных куков)
curl http://localhost:5000/api/whatever -H 'Authorization: Bearer $JWT'
сохраненный в базу токен нигде и никак не используется
Спасибо, большое. Много полезного почерпнул. Было бы хорошо если бы выложили код на github и тут прицепили ссылку.
Я конечно и сам велосипеды пишу, но зачем вышеописанный, когда есть https://github.com/jazzband/djangorestframework-simplejwt
ждем статью о следующем этапе, чтобы завернуть это все в контейнеры докера, прикрутив постгрес, редис и селери )
~\Desktop\Django\new_proj\django_auth\users\models.py in _generate_jwt_token(self)
92 token = jwt.encode({
93 'id': self.pk,
---> 94 'exp': int(dt.strftime('%s'))
95 }, settings.SECRET_KEY, algorithm='HS256')
96
ValueError: Invalid format string
Настройка аутентификации JWT в новом проекте Django