【问题标题】:Django reset password not catching invalid email idsDjango重置密码没有捕获无效的电子邮件ID
【发布时间】:2014-11-26 12:24:07
【问题描述】:

我正在使用带有自定义模板的 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.

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

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

提前致谢。

【问题讨论】:

    标签: python django django-forms django-views


    【解决方案1】:

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

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

    【讨论】:

    • 哦.. 我已经在使用 django-allauth 进行 Facebook 登录。我不知道他们还提供了重置密码功能。如何连接 url 以使用 django-allauth?他们没有很好的文档。非常感谢您的帮助:)
    • 要更改模板,只需覆盖您需要的模板/帐户/目录中的任何内容(在这种情况下与密码重置相关):github.com/pennersr/django-allauth/tree/master/allauth/…
    • 确保您使用 allauth 进行登录、注册等...更有意义的是只有一个应用程序可以处理所有事情,allauth 非常适合进行基本的用户处理
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2016-09-20
    • 2015-02-28
    • 2017-01-25
    • 2020-02-15
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多