пользовательский сервер аутентификации электронной почты не работает в Django 2.1.4 - PullRequest
0 голосов
/ 10 декабря 2018

У меня проблемы с интеграцией пользовательского бэкэнда аутентификации в django 2.1.4.Ниже приведен мой код:
мой FMS.authBackend модуль:

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

мой settings.py:

AUTHENTICATION_BACKENDS = (
                'FMS.authBackend.authEmailBackend',
                'django.contrib.auth.backends.ModelBackend',

                )

мой urls.py:

from django.contrib.auth import views as auth_views
urlpatterns = [ 
        path('login', my_decos.logout_required(auth_views.LoginView.as_view(template_name = 'register/login.html')),name = 'login')
]

Приведенный выше код не работает в моем случае.Функция authenticate в authEmailBackend никогда не вызывается как ничего, напечатанное в консоли, но я печатаю оператор в authenticate функции.

, хотя тот же код работал для django 2.0.8, единственное отличие тогда заключалось в том, чтоurls.py было:

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

, но в более новом django django.contrib.auth.views.login больше не поддерживает, и нам нужно использовать django.contrib.auth.views.LoginView.Я где-то читал, что для использования пользовательских AUTHENTICATION_BACKEND наш URL должен указывать на django.contrib.auth.views.login, но это здесь невозможно.

Так что вы можете помочь мне решить эту проблему.

1 Ответ

0 голосов
/ 11 декабря 2018

запрос аргумент необходимо передать методу аутентификации

  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
...