2015-01-06 2 views
0

Как-то, у меня есть пользователь в моей базе данных от модели django.contrib.auth.models, которая не проходит проверку подлинности.Django authenticate не регистрирует пользователя

Таким образом, мы имеем в ./manage.py оболочки:

>>> django.contrib.auth.models.User.objects.filter(username='tester')[0].password 

u'yolo' 

>>> django.contrib.auth.models.User.objects.filter(username='tester')[0].username 

u'tester' 

но:

>>> should_be_tester = django.contrib.auth.authenticate(username='tester',password='yolo') 

возвращает ничего. Есть ли что-то, что нужно сделать пользователям, прежде чем django будет их аутентифицировать? Думаю, я создал их с помощью objects.create().

+0

(это в ответ на комментарий, который больше не существует) Я использую именно эту строку из документов: user = authenticate (имя пользователя = имя пользователя, пароль = пароль) с пользователем, который определенно находится в базе данных, но should_be_tester - нет. Я делаю что-то неправильно? – wcai

ответ

4

Похоже, что ваш пароль хранится как чистый текст в базе данных. Попробуйте использовать метод set_password, чтобы пароль запускался через соответствующий алгоритм хэширования.

При вызове authenticate метода Джанго запущен yolo через алгоритм хеширования, который производит пароль, который выглядит примерно так: jRQarGxWd7ZV$+npDSC0ffIXAOUo/R5KSaPFbauQdTV5eAOmkq1P/p/Y=, а затем сравнивая значение хэша к тому, что хранится в базе данных, в вашем случае обычной текстовая версии от yolo. Поскольку вы сохраняете пароль в текстовом формате, значения не совпадают и возвращается None.

>>> from django.contrib.auth.models import User 
>>> from django.contrib.auth import authenticate 

>>> u = User.objects.get(username='tester') 
>>> u.set_password('yolo') 
>>> u.save() 

>>> should_be_tester = authenticate(username='tester', password='yolo') 
>>> print(should_be_tester) 
tester 

Дополнительное примечание. Когда вы хотите получить одну и только одну запись из базы данных, используйте метод .get() вместо .filter()[0].

+0

Спасибо, это имеет большой смысл! – wcai

Смежные вопросы