用户使用电子邮件而不是用户名登录.问题:传递电子邮件但检查用户名 [英] user login using email instead of username. issue: passing email but its checking username

查看:51
本文介绍了用户使用电子邮件而不是用户名登录.问题:传递电子邮件但检查用户名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法使用电子邮件登录,但可以使用用户名登录.如何使用电子邮件而不是用户名登录.这是我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆