Django重置密码没有捕获无效的电子邮件ID

时间:2014-10-01 15:39:38

标签: python django django-forms django-views

我正在使用Django内置的重置密码视图和自定义模板。虽然它可以成功运行,但如果提交的电子邮件ID尚未在站点中注册,则不会显示错误消息。

我按照说明here帮助我达到这一点。

#urls.py

url(r'^users/password/reset/$', 
     'django.contrib.auth.views.password_reset', 
     {'post_reset_redirect' : '/users/password/reset/done/'},
     name="reset_password"
),

url(r'^users/password/reset/done/$',
     'django.contrib.auth.views.password_reset_done'
),

url(r'^users/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
     'django.contrib.auth.views.password_reset_confirm', 
     {'post_reset_redirect' : '/users/password/done/'}
),

url(r'^users/password/done/$',
     'django.contrib.auth.views.password_reset_complete'
),

无论我提供什么电子邮件ID,Django总是将我重定向到 / users / password / reset / done / ,其中说:

We've e-mailed you instructions for setting your password to the e-mail address
you submitted.

You should be receiving it shortly.

这是误导性的,因为用户可能输入了错误的电子邮件地址,但仍然看到上面的页面。

如果未注册电子邮件地址,如何显示错误消息?

提前致谢。

1 个答案:

答案 0 :(得分:3)

实现该方法的简便方法是使用django-allauth。无需任何额外设置即可工作,留言:电子邮件地址未分配给任何用户帐户。

我暂时没有使用原始用户,但如果你绝对需要,你可以尝试创建自己的视图并手动验证电子邮件是否在服务器中(如果是,你可以调用原始函数)。您可能需要扩展模板或表单以将操作重定向到您自己的视图。