Я намагаюся встановити аутентифікацію маркера за допомогоюDjango Rest Framework. Я зараз пишу кілька тестів, щоб побачити, чи можу я отримати токен для користувача.
def test_create_valid_request(self):
u = User.objects.create(username="test1", password="thisis8chars")
Token.objects.create(user=u)
# these assertions all pass
self.assertEqual(User.objects.get(username="test1"), u)
self.assertEqual(u.username, "test1")
self.assertEqual(u.password, "thisis8chars")
data = {"username": "test1", "password": "thisis8chars"}
url = "/api-token-auth/"
response = self.client.post(url, data, format="json")
print response.status_code
print response.content
Це друкує:
400
{"non_field_errors":["Unable to log in with provided credentials."]}
Я розумію, що має бути щось не такз моїми обліковими даними, але я не можу його бачити. Створюю користувача, перевіряю його атрибути і роблю запит на публікацію, щоб отримати маркер. Я вручну протестував це на сервері розвитку Django httpie
, і він працює і повертає маркер. Будь-які ідеї, які проблеми можуть бути? Це проблема з налаштуванням тестування? Якщо так, то що?
Я можу розмістити / описати більше коду, якщо це необхідно.
Дякую
Відповіді:
0 для відповіді № 1Отже, помилка була дуже проста: я хотів User.objects.create_user
а не User.objects.create
.
Пароль, який я намагався використовувати з моїмКод вище був проблематичним, тому що він не "хеширований або солоний, і тому, що Django не зберігає або відправляє звичайні текстові паролі, мені відправка звичайного текстового пароля призвела до поганої помилки облікових даних.
0 для відповіді № 2
Як ви вже говорили, вам потрібно скористатися User.objects.create_user
.
Щоб додати до цього, якщо у вас вже є примірник користувача, і ви хочете змінити свій пароль, вам доведеться викликати user.set_password(raw_password)
метод