Django check_token(user, token) не работает в view, но работает в test/shell_plus?

Получаем странное поведение. В обычном коде Django (view) это не удается:

user = User.objects.get(...)
uid = urlsafe_base64_encode(force_bytes(user.pk))
token = default_token_generator.make_token(user)

print("CHECK TOKEN:", default_token_generator.check_token(to, token))
# this prints True!

send_email_function(user, uid, token)
# When using password reset email, token is denied

Затем при использовании токена для сброса пароля представление сброса пароля утверждает, что токен недействителен. Если я создаю команду управления, которая вызывает тот же код для отправки сообщения электронной почты для сброса пароля: токен работает!

Это работает в shell_plus, тот же код в основном:

>>> from django.contrib.auth.tokens import default_token_generator
>>> from django.utils.encoding import force_bytes
>>> from django.utils.http import urlsafe_base64_encode
>>> user = User.objects.last()
>>> token = default_token_generator.make_token(user)
>>> default_token_generator.check_token(user, token)
True

Я распечатал SECRET_KEY в каждом случае, и это кажется нормальным. Проверка функции make_token привела меня к попытке установить password и last_login, которые не помогли.

Очень запутанно!

Вернуться на верх