用户使用电子邮件而不是用户名登录.问题:传递电子邮件但检查用户名 [英] user login using email instead of username. issue: passing email but its checking username
本文介绍了用户使用电子邮件而不是用户名登录.问题:传递电子邮件但检查用户名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我无法使用电子邮件登录,但可以使用用户名登录.如何使用电子邮件而不是用户名登录.这是我的 html 页面:我尝试传递电子邮件而不是用户名,但无法登录
I am unable to login with email but I am able to do it with username. How do I login with email instead of username. This is my html page : I tried to pass email instead of username but unable to login
这是我的 views.py 文件:当我尝试通过将用户名更改为电子邮件进行身份验证时,它正在打印提供的登录详细信息无效!";这是forms.py:
This is my views.py file: When i try to authenticate by change username to email, it is printing "invalid login details supplied!" This is forms.py:
推荐答案
请按照以下步骤操作:
在dj/views.py:
from django.contrib.auth.backends import ModelBackend
import re
from django.contrib.auth import get_user_model
User = get_user_model()
class UsernameOrEmailBackend(ModelBackend):
def authenticate(self,request, username=None, password=None,**kwargs):
if '@' in username: # Apply your custom validation like '.' and custom domain...
kwargs = {'email': username}
elif re.search("^0?[5-9]{1}\d{9}$",username): #optional
kwargs = {'phone_no':username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
在settings.py:
AUTHENTICATION_BACKENDS =['dj.views.UsernameOrEmailBackend',
'django.contrib.auth.backends.ModelBackend',
]
这篇关于用户使用电子邮件而不是用户名登录.问题:传递电子邮件但检查用户名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文