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

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',
                         ]

【讨论】:

以上是关于用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名的主要内容,如果未能解决你的问题,请参考以下文章