如何在 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 验证函数。它使用用户名和密码来验证用户。您可能想要创建使用电子邮件进行身份验证的自定义身份验证后端。
当我使用 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 验证函数。它使用用户名和密码来验证用户。您可能想要创建使用电子邮件进行身份验证的自定义身份验证后端。