如何在 djangoreostframework-simplejwt 中使用电子邮件而不是用户名?

How can I use email instead of username in djangoreostframework-simplejwt?

当我使用 djangoreostframework-simplejwt 获取访问令牌和刷新令牌时,我将使用电子邮件而不是用户名。所以在编写代码后,我可以访问我的浏览器并确认用户名字段已重命名为 email.But 当我 post 电子邮件字段中的用户电子邮件时,出现以下错误。

"detail": "No active account found with the Given Credentials"

你能告诉我我的代码有什么问题吗?这是我的代码。

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

谢谢

您重写了 class CustomTokenObtainPairSerializer 的验证函数。 在 Validate 函数中,调用 validate super()。在 TokenObtainSerializer 中,验证函数使用 Django 验证函数。它使用用户名和密码来验证用户。您可能想要创建使用电子邮件进行身份验证的自定义身份验证后端。