Если вы хотите создать токен до входа в систему, вы можете переопределить 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)