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]
Спасибо.