Django простой jwt вход с OTP без пароля

у меня есть приложение django-rest, для системы auth мне нужна помощь .
Я хочу использовать JWT для аутентификации (simple_jwt), но я читал документацию, что я нашел, что мне нужно отправить пароль и пользователя, чтобы получить токен для получения логина .
Это проблема, потому что у пользователей нет пароля, я собираюсь использовать OTP код для входа пользователей

Я искал

в google и похоже, что я должен код бэкэнд я не хочу сделать его сложным я хочу как простой, как это может быть, я искал и я нашел что-то вроде knox тоже сделать это может помочь мне из ?

Я искал и смотрел сам пакет simple_jwt и нашел решение этой проблемы, чтобы сделать JWT без проверки пароля самого пакета, или сделать новый бэкенд. Мы можем использовать объекты Token из simple_jwt для создания токенов, нам просто нужно передать ему экземпляр User, и он создаст токен для нас.

from rest_framework_simplejwt.tokens import RefreshToken, AccessToken, BlacklistedToken
from django.contrib.auth.models import User
from rest_framework.views import APIView
from rest_framework.response import Response


class LoginView(APIView):
    # choice a user to build a token for him
    user = User.objects.get(username='Example')

    # access token for that user 
    access_token = AccessToken.for_user(user=user)
    # refresh token for that user 
    refresh_token = RefreshToken.for_user(user=user)
    
    return Response({'access': str(access_token),
                     'refresh': str(refresh_token)})

NOTE: есть проблема с этим способом, вы должны аутентифицировать запрос самостоятельно, то есть, например, если вы используете одноразовый пароль с OTP (SMS), вы должны проверить, что пользователь отправляет правильный код или пароль, а затем отправить ему токен. После отправки токена фронт-энд должен обрабатывать токен в каждом запросе и отправлять его в заголовке. Еще одна вещь - не нужно делать черный список(logout) и refresh view для собственного руководства, вы можете использовать встроенный пакет simple_jwt, и они прекрасно работают.

from rest_framework_simplejwt.views import TokenBlacklistView, TokenRefreshView
from rest_framework import permissions

# It get Refresh token and give new access and refresh token 
class LogoutView(TokenBlacklistView):
    permission_classes = [permissions.IsAuthenticated]


# It will put Refresh Token in blacklist
class RefreshView(TokenRefreshView):
    permission_classes = [permissions.IsAuthenticated]

Спасибо.

Вернуться на верх