Почему django .contrib.auth.authenticate () не работает здесь? - PullRequest
3 голосов
/ 19 марта 2020

Я пишу простое (на данный момент) Django приложение. У меня проблемы с аутентификацией: я пытаюсь использовать все готовые компоненты, и как в самом приложении, так и в тестах я не могу аутентифицировать пользователей. Так, например, вот тест, который не проходит:

from django.conf import settings
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.test import TestCase

[...]

class UserTestCase(TestCase):
    def setUp(self):
        self.testu = User(username="thename", password="thepassword", first_name="thefirstname")
        self.testu.save()

    def testAuthenticate(self):
        u = authenticate(username="thename", password="thepassword")
        self.assertEqual(u.first_name, "thefirstname")

Я получаю AttributeError:

Объект 'NoneType' не имеет атрибута 'first_name'.

Я думаю, это потому, что authenticate () возвращает None (что означает, что такого пользователя нет).

Это не удается, независимо от того, включаю я строку «self.testu.save ()» или нет.

У меня проходят другие тесты, поэтому я не думаю, что проблема в инфраструктуре тестов. Я могу успешно создавать пользователей и получать их информацию из базы данных.

Единственное упоминание о пользователе в models.py:

from django.contrib.auth.models import User

Я прочитал много документации, но могу не понять, что происходит. Кто-нибудь может помочь? Заранее спасибо.

1 Ответ

5 голосов
/ 19 марта 2020

Вы не можете создать объект User с таким паролем. Пароль должен быть хэш . Поэтому вы должны использовать метод .set_password(..) [Django -doc] :

class UserTestCase(TestCase):

    def setUp(self):
        self.testu = User(username="thename", first_name="thefirstname")
        self.testu<b>.set_password(</b>"thepassword"<b>)</b>
        self.testu.save()

    # &hellip;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...