用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名

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 用户注册单步(而不是两步)过程?

Django - 使用电子邮件登录

使用用户 ID 代替电子邮件发送密码恢复令牌是不是安全?

Django:创建电子邮件登录字段而不是用户名后,超级用户和用户无法登录到管理员和用户页面

email地址 地址怎么写?