Приложение, в котором я работаю, позволит пользователям успешно сбросить свой пароль; urls.py содержит следующее:Django password_reset, обработка использованного URL
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
'django.contrib.auth.views.password_reset_confirm',
name='password_reset_confirm')
Это работает, как ожидалось, направляя пользователя к таким URL, как:
http://example.com/reset/MTNzgN/3ly-466604bc1524f789c120/
..where их пароль может быть сброшен.
До сих пор это не проблема, но если пользователи снова посещают ссылку (и, похоже, некоторые пользователи это делают), они получают одно и то же приглашение изменить свой пароль, только в этом случае не окажут никакого эффекта, когда они вводят значения в поля. Это приводит к некоторой путанице.
Является ли это ожидаемым поведением Django? Если нет, есть ли какие-либо способы, с помощью которых я мог бы переопределить django.contrib.auth.views.password_reset_confirm и обнаружить использованный токен там или перенаправить на предупреждение при ошибке? В идеале было бы лучше показать им, что «этот маркер уже использовался, попробуйте сбросить пароль снова», а не сообщение об ошибке после сброса, но даже последний вариант будет лучше, чем то, что он делает сейчас.
Это выглядит хорошо, спасибо. Могу я спросить, однако, где в приложении вы добавляете класс PasswordResetConfirmView, пожалуйста? – knirirr
В views.py моего приложения. На самом деле я создал собственное пользовательское представление для сброса пароля, но я следил за схемой кодирования самой собственной парольной игры для домена django. Посмотрите здесь: http://ruddra.com/blog/2014/10/21/make-own-forgot-slash-reset-password-in-django/ :) – ruddra