Django rest framework - выход аутентификации по токенам

Я реализовал аутентификацию Token в соответствии с django rest framework Docs.

Формируйте то, что я читаю, аутентификация Token для DRF довольно проста - один токен на пользователя, токен не истекает и действителен для использования всегда (Я прав?).

Я понимаю, что там есть лучшие практики, но на данный момент аутентификация маркера DRF подходит для меня.

мой вопрос -, что лучше всего подходит для выхода с обычной аутентификацией токена DRF?

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

Любой, у кого есть опыт?

Ответ 1

Вот простой вид, который я использую для выхода:

from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

class Logout(APIView):
    queryset = User.objects.all()

    def get(self, request, format=None):
        # simply delete the token to force a login
        request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)

Затем добавьте его в свой urls.py:

urlpatterns = [
    ...
    url(r'^logout/', Logout.as_view()),
]

Ответ 2

ЦЕЛЬ ИДЕИ АВТОРИЗАЦИИ ТОКА:

Обычно в службах аутентификации существует время, связанное с токеном. По истечении определенного времени токен будет истек. Здесь мы получаем токен доступа, срок действия которого отправляется вместе с ним сервером. Теперь клиенту нужно каждый раз отправлять этот токен в заголовок запроса, чтобы сервер мог определить, кто является пользователем. Либо мы можем отслеживать, когда он истечет, либо мы можем продолжать использовать его, пока не получим ошибку INVALID_TOKEN. В этом случае нам придется снова получить маркер с сервера.

Время жизни access_token не зависит от сеанса входа пользователя, который предоставляет доступ клиенту. OAuth2, скажем, не имеет понятия входа пользователя или выхода из системы или сеанса. Токен просто используется для идентификации пользователя, если он тот, кем он говорит.

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

Срок действия токена в авторегрессии DRF:

В настоящее время аутентификация маркера DRF не поддерживает эту функцию. Вам придется реализовать его самостоятельно или использовать сторонний пакет, который предоставляет эту функцию. Он должен проверить срок действия токена и вызвать исключение, если токен истек.

Чтобы реализовать его самостоятельно, вы можете подклассы из класса аутентификации маркера DRF и добавить свою логику.
Вы даже можете использовать сторонний пакет django-rest-framework-expiring-tokens.

Некоторые ссылки:
1. Аутентификация токена для API RESTful: следует ли периодически менять токен?
2. Как выйти из приложения, где я использовал OAuth2 для входа в Google?

Ответ 3

Похоже, SessionAuthentication - это то, что вы действительно ищете. Вы можете начать (войти в систему) через сеанс через BasicAuthentication или TokenAuthentication. Затем используйте sessionid как ваш "токен" для остальных вызовов api. "Токен" истекает при выходе из системы или превышении определенного времени.

Если вы столкнулись с проблемой csrftoken с использованием аутентификации сеанса, this может быть очень полезной.