Невозможно получить пользователя с помощью фильтра с именем пользователя и паролем - PullRequest
0 голосов
/ 27 сентября 2018

Я использую следующий код

email = validated_data["login"]
password = validated_data["password"]
user_obj = User.objects.filter(Q(email__exact=email) & Q(password__exact=password))

Я изменил пароль от администратора, но пользователь не вернулся.Однако, если я удалю проверку пароля, то получу объект пользователя обратно. Объект, который я получу, если уберу условие Q(password__exact=password), имеет поле _password как None.Некоторое время этот код работал нормально, но сегодня он не возвращает объект обратно.Я что-то здесь упускаю?Я подтвердил, что получаю правильное имя пользователя и пароль от клиента. Я также попытался получить доступ к администратору с этим именем пользователя и паролем (учетная запись имеет статус персонала), и я смог войти в систему. Таким образом, пароль правильный, но по какой-то причинеЯ не могу получить этого пользователя с помощью фильтрации.?Что я могу делать не так?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

password хранится не в виде обычного текста, а в виде хэша (и немного больше).Получите пользователя по имени пользователя и проверьте пароль:

# assumes there can be only one
user = User.objects.get(email=email) 
# this checks the plaintext password against the stored hash 
correct = user.check_password(password)  

Кстати, вам не нужны Q объекты для логического AND.filter(email__exact=email, password__exact=password) будет достаточно, хотя в этом случае это не имеет особого смысла.

0 голосов
/ 27 сентября 2018

это потому, что Django не хранит пароль в виде простого текста, который они хэшируют, вы не можете ввести пароль, но он не будет возвращаться ни разу, если вы не получите тот же хеш password = validated_data["password"] здесь

...