Получение ошибки типа при попытке аутентификации пользователя - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь аутентифицировать пользователей, используя пользовательскую модель MyUser в Django версии 2.0.4. Однако, когда код попадает в строку check_password в моем пользовательском модуле бэкэнда, я получаю эту ошибку:

Error

Traceback:

    Traceback:
     File "D:\Python\lib\site-packages\django\core\handlers\exception.py" in inner
     35 response = get_response(request)

     File "D:\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
     128 response = self.process_exception_by_middleware(e, request)

     File "D:\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
     126 response = wrapped_callback(request, *callback_args, **callback_kwargs)

    File "d:\Programs\Python\Django\test2\accounts\views.py" in login_user
    52 user        = authenticate(request=request, email=email, password=password)

    File "D:\Python\lib\site-packages\django\contrib\auth\__init__.py" in authenticate
    70 user = _authenticate_with_backend(backend, backend_path, request, credentials)

    File "D:\Python\lib\site-packages\django\contrib\auth\__init__.py" in _authenticate_with_backend
    116 return backend.authenticate(*args, **credentials)

    File "d:\Programs\Python\Django\test2\accounts\backends.py" in authenticate
    29 if MyUser.check_password(password):

    Exception Type: TypeError at /accounts/login/
    Exception Value: check_password() missing 1 required positional argument: 'raw_password'

Вот мой пользовательский бэкэнд из backends.py:

    class EmailAuthenticationBackend(ModelBackend):
      def authenticate(self, request, email=None, password=None):
        MyUser = get_user_model()

        try:
          # Check the email/password and return a user
          user = MyUser.objects.get(email=email)

          # BUG
          if MyUser.check_password(password):
            return user

          except MyUser.DoesNotExist:
            return None

Вот так и вводится пароль. Вид пользователя логина:

    def login_user(request):
      template_name   = 'registration/login.html'

      if request.method == 'POST':
        email       = request.POST['email']
        password    = request.POST['password']
        user        = authenticate(request=request, email=email, password=password)

Хотя ошибка кажется несколько очевидной, все попытки, которые я пробовал, потерпели неудачу. Я прочитал документы и искал другой похожий подход: ничего.

1 Ответ

0 голосов
/ 15 мая 2018

Вы должны вызывать этот метод в своем экземпляре, а не в классе.

if user.check_password(password):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...