Как я могу использовать электронную почту вместо имени пользователя в djangoreostframework-simplejwt? - PullRequest
1 голос
/ 06 августа 2020

Я собираюсь использовать электронную почту вместо имени пользователя, когда я получаю токен доступа и обновляю токен sh с помощью djangoreostframework-simplejwt. Таким образом, после написания кода я мог получить доступ к своему браузеру и подтвердить, что поле, которое было именем пользователя, было переименовано в электронную почту. Но когда я отправляю электронное письмо пользователя в поле электронной почты, появляется следующая ошибка.

"detail": "Активная учетная запись с указанными учетными данными не обнаружена"

Вы можете сказать мне, что не так с моим кодом? Вот мой код.

Serializers.py

from rest_framework_simplejwt.serializers import TokenObtainSerializer
from django.contrib.auth.models import User

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)

        return data

views.py

from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import CustomTokenObtainPairSerializer

class EmailTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer

спасибо

1 Ответ

0 голосов
/ 06 августа 2020

Вы переопределяете функцию проверки класса CustomTokenObtainPairSerializer. В функции Validate вы вызываете функцию validate super (). В TokenObtainSerializer функция проверки использует функцию проверки подлинности Django. Это использует имя пользователя и пароль для проверки пользователя. Возможно, вы захотите создать собственный сервер аутентификации, который будет использовать электронную почту для аутентификации.

...