当我获得访问令牌并使用djangoreostframework-simplejwt刷新令牌时,我将使用电子邮件代替用户名。因此,编写代码后,我可以访问浏览器并确认用户名字段已重命名为email。但是,当我在email字段中发布用户的电子邮件时,出现以下错误。
“ 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
谢谢
您重写类CustomTokenObtainPairSerializer的validate函数。在Validate函数中,调用validate super()。在TokenObtainSerializer中,validate函数使用Django authenticate函数。该操作使用用户名和密码来验证用户。您可能想要创建一个使用电子邮件进行身份验证的自定义身份验证后端。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句