Автоматически создать токен для администратора в Django - PullRequest
0 голосов
/ 04 апреля 2020

Я ищу способ автоматического создания токена с rest_framework.authtoken.models.Token при входе администратора в панель администратора.

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

1 Ответ

0 голосов
/ 04 апреля 2020

Если вы хотите создать токен до входа в систему, вы можете переопределить django сервер аутентификации, как показано в следующем примере:

class TokenCreatingBackend(BaseBackend):
    def authenticate(self, request, username, password, **kwargs):
        user = super().authenticate(request, username=None, password=None, **kwargs)
        # your token generation here!

и добавить эту строку в settings.py

AUTHENTICATION_BACKENDS=['path.to.your.TokenCreatingBackend']

Чтобы удалить токен, вы можете переопределить вид выхода из системы:


def my_logout_view(request):

    user = getattr(request, "user", None)
    if not getattr(user, "is_authenticated", True):
        user = None
    # destroy token
    user_logged_out.send(sender=user.__class__, request=request, user=user)
    if hasattr(request, "user"):
        from django.contrib.auth.models import AnonymousUser

        request.user = AnonymousUser()

и установить URL для его подключения:

...
   path('account/logout/', 'path.to.my_logout_view', name='logout'),
   path('admin/logout/', 'path.to.my_logout_view', name='logout')
...

Если вы хотите создать токен сразу после аутентификационные сигналы :

from django.contrib.auth.signals import user_logged_in, user_logged_out


def create_token(sender, user, request, **kwargs):
    pass # create token

def destroy_token(sender, user, request, **kwargs):
    pass # destroy token

user_logged_in.connect(create_token)
user_logged_out.connect(destroy_token)
...