如何在Django | rest_framework_jwt中使用用户名或电子邮件登录?
我想同时使用如何在Django | rest_framework_jwt中使用用户名或电子邮件登录?,django,authentication,django-rest-framework,customization,Django,Authentication,Django Rest Framework,Customization,我想同时使用用户名和电子邮件登录页面,我编写了一个CustomBackend视图进行身份验证,无论我如何更改,只有用户名起作用,我使用“电子邮件”登录页面,总是出现无法使用提供的凭据登录的错误,视图的部分代码.py如下: from django.contrib.auth import get_user_model MyUser = get_user_model() class CustomBackend(object): def authenticate(self, username
用户名
和电子邮件
登录页面,我编写了一个CustomBackend
视图进行身份验证,无论我如何更改,只有用户名
起作用,我使用“电子邮件”登录页面,总是出现无法使用提供的凭据登录的错误
,视图的部分代码.py如下:
from django.contrib.auth import get_user_model
MyUser = get_user_model()
class CustomBackend(object):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = MyUser.objects.get(Q(username=username)|Q(email=username))
if user.check_password(password):
return user
except MyUser.DoesNotExist:
MyUser().set_password(password)
AUTHENTICATION_BACKENDS = (
'general.views.CustomBackend',
'django.contrib.auth.backends.ModelBackend'
)
settings.py的部分代码如下:
from django.contrib.auth import get_user_model
MyUser = get_user_model()
class CustomBackend(object):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = MyUser.objects.get(Q(username=username)|Q(email=username))
if user.check_password(password):
return user
except MyUser.DoesNotExist:
MyUser().set_password(password)
AUTHENTICATION_BACKENDS = (
'general.views.CustomBackend',
'django.contrib.auth.backends.ModelBackend'
)
任何想法都将受到高度赞赏。您需要为
用户添加自定义模型,并指定USERNAME\u字段='email'
感谢您的快速回复,据我们所知,USERNAME\u字段='email'
不能同时使用'USERNAME'和'email'登录,只能使用email
,我想要两个字段你的代码看起来不错,所以你需要更详细地调试。在authenticate方法中设置断点并检查失败的位置。或者添加打印语句以了解所遵循的路径。也许您可以从这个问题的答案中获得一些帮助:您需要为用户
添加自定义模型,并指定用户名\u字段='email'
,感谢您的快速回复,据我所知,USERNAME\u FIELD='email'
无法同时使用'USERNAME'和'email'登录,仅email
,我想要两个字段您的代码看起来不错,因此您需要进行更详细的调试。在authenticate方法中设置断点并检查失败的位置。或者添加打印语句以了解所遵循的路径。也许您可以从以下问题的答案中获得一些帮助: