用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名
Posted
技术标签:
【中文标题】用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名【英文标题】:user login using email instead of username. issue: passing email but its checking username 【发布时间】:2021-01-01 19:50:32 【问题描述】:我无法使用电子邮件登录,但我可以使用用户名登录。如何使用电子邮件而不是用户名登录。 这是我的 html 页面:我尝试传递电子邮件而不是用户名,但无法登录
这是我的 views.py 文件:当我尝试通过将用户名更改为电子邮件进行身份验证时,它正在打印“提供的登录详细信息无效!” 这是forms.py:
【问题讨论】:
【参考方案1】:按照以下步骤操作:
在 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\d9$",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',
]
【讨论】:
以上是关于用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名的主要内容,如果未能解决你的问题,请参考以下文章
ember简单auth用rails设计用户名而不是电子邮件?
如何通过电子邮件强制执行 Django 用户注册单步(而不是两步)过程?