Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义电子邮件身份验证后端在django 2.1.4中不工作_Python_Django_Django Authentication_Django Login - Fatal编程技术网

Python 自定义电子邮件身份验证后端在django 2.1.4中不工作

Python 自定义电子邮件身份验证后端在django 2.1.4中不工作,python,django,django-authentication,django-login,Python,Django,Django Authentication,Django Login,我在django 2.1.4中集成自定义身份验证后端时遇到问题。以下是我的代码: 我的FMS.AUTH后端模块: from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend class authEmailBackend(ModelBackend): def authenticate(self, username=None, password=No

我在django 2.1.4中集成自定义身份验证后端时遇到问题。以下是我的代码: 我的FMS.AUTH后端模块:

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class authEmailBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        print("aaaaaaa")
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(email=username)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
        return None
my settings.py:

my URL.py:

以上代码在我的情况下不起作用。authEmailBackend中的函数authenticate从来不会在控制台中以“无”打印的形式调用,但我会在authenticate函数中打印语句

虽然django 2.0.8也使用相同的代码,但唯一的区别是URL.py是:

但是在较新的django中,django.contrib.auth.views.login不再支持任何功能,我们需要使用django.contrib.auth.views.LoginView。我在某个地方读到,要使用自定义身份验证,我们的url必须指向django.contrib.auth.views.login,但这在这里是不可能的

因此,您能帮我解决这个问题吗。

参数需要传递给authenticate方法

  class authEmailBackend(ModelBackend):
        **def authenticate(self, request, username=None, password=None, **kwargs):**
            print("aaaaaaa")
            UserModel = get_user_model()
            try:
                user = UserModel.objects.get(email=username)
            except UserModel.DoesNotExist:
                return None
            else:
                if user.check_password(password):
                    return user
            return None
参数需要传递给authenticate方法

  class authEmailBackend(ModelBackend):
        **def authenticate(self, request, username=None, password=None, **kwargs):**
            print("aaaaaaa")
            UserModel = get_user_model()
            try:
                user = UserModel.objects.get(email=username)
            except UserModel.DoesNotExist:
                return None
            else:
                if user.check_password(password):
                    return user
            return None

我们在早期版本中不需要它?是从django 1.11传递来进行身份验证的,在早期版本中我们不需要它吗?从django 1.11传递以进行身份验证
from django.contrib.auth import views as auth_views
urlpatterns = [ 
        path('login', my_decos.logout_required(auth_views.login(template_name = 'register/login.html')),name = 'login')
]
  class authEmailBackend(ModelBackend):
        **def authenticate(self, request, username=None, password=None, **kwargs):**
            print("aaaaaaa")
            UserModel = get_user_model()
            try:
                user = UserModel.objects.get(email=username)
            except UserModel.DoesNotExist:
                return None
            else:
                if user.check_password(password):
                    return user
            return None