1

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

"detail": "没有找到具有给定凭据的活动帐户"

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

序列化程序.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

视图.py

from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import CustomTokenObtainPairSerializer

class EmailTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer

谢谢

4

1 回答 1

0

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

于 2020-08-06T14:09:27.203 回答