DRF simple-jwt ошибка "detail": "Не найдена активная учетная запись с заданными учетными данными".
Я могу создать учетную запись в DRF_simple_jwt, но когда дело доходит до входа в эту учетную запись, она говорит
{"detail":"No active account found with the given credentials"}
Я пробовал гуглить и пробовал это и многое другое, но все тщетно. Я не знаю, где кроется проблема.
Вот мой код serializers.py
from rest_framework import serializers
from .models import *
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework_simplejwt.serializers import TokenObtainSerializer
from django.contrib.auth.hashers import make_password
class EmailTokenObtainSerializer(TokenObtainSerializer):
username_field = User.EMAIL_FIELD
class CustomTokenObtainPairSerializer(EmailTokenObtainSerializer):
@classmethod
def get_token(cls, user):
return RefreshToken.for_user(user)
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
class UserSerializer(serializers.ModelSerializer):
"""
Serializer for user object
"""
isAdmin = serializers.SerializerMethodField(read_only=True)
class Meta:
model = User
fields = ('id', 'username','isAdmin', 'email','phone','room','hostel')
def get_isAdmin(self, obj):
return obj.is_staff
def validate_password(self, value: str) -> str:
"""
Hash value passed by user.
: param value: password of a user
:return: a hashed version of the password
"""
return make_password(value)
и вот код для файла views.py
class EmailTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer
и вот urls.py:
path("login/", EmailTokenObtainPairView.as_view(), name="token_obtain_pair"),
path("refresh/", TokenRefreshView.as_view(), name="token_refresh"),
Вы можете запросить дополнительные коды. Спасибо за помощь, потому что вы - моя последняя надежда.
в CustomTokenObtainPairSerializer
необходимо вернуть данные
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
return data
и не важно, но если вы не добавляете пользовательские утверждения к токену в своем методе get_token
, вам не нужно переопределять этот метод