【问题标题】:django 1.6.5 password reset email check validlinkdjango 1.6.5 密码重置电子邮件检查有效链接
【发布时间】:2015-12-07 12:12:24
【问题描述】:

我正在遵循blog 中的确切步骤。

也进行了更改:

1) the url template tag syntax as noted above by "F L" 
2) uidb36 in the urls.py and email template both should be uidb64 per https://docs.djangoproject.com/en/1.6/releases/1.6/#django-contrib-auth-password-reset-uses-base-64-encoding-of-user-pk

当我输入电子邮件地址时,我会收到邮件,在输入 url:http://localhost:8000/user/password/reset/NDI-47h-e1fbd1df48ce2aa05de4/ 后,我总是会收到邮件:

Password reset unsuccessful
The password reset link was invalid, 
possibly because it has already been used. 
Please request a new password reset.

即有效链接总是失败。为什么?

分享相关代码块:urls.py:

urlpatterns = patterns('',
                       url(r'^admin/', include(admin.site.urls)),
                       url(r'^user/password/reset/$', 
                           'django.contrib.auth.views.password_reset', 
                           {'post_reset_redirect' : '/user/password/reset/done/'}, name="password_reset"),
                       (r'^user/password/reset/done/$',
                        'django.contrib.auth.views.password_reset_done'),
                       (r'^user/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+)-(?P<token>.+)/$', 
                        'django.contrib.auth.views.password_reset_confirm', 
                        {'post_reset_redirect' : '/user/password/done/'}),
                       (r'^user/password/done/$', 
                        'django.contrib.auth.views.password_reset_complete'),

在我的模板文件夹中,创建了一个名为registration的文件夹: 我的模板文件夹的结构: /templates$ 查找

.
./registration
./registration/password_reset_form.html
./registration/password_reset_confirm.html
./registration/password_reset_email.html
./registration/password_reset_done.html
./registration/password_reset_complete.html
./admin

password_reset_email.html:

{% load i18n %}
{% comment %}
{% load url from future %}
{% endcomment %}
{% autoescape off %}

You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}.

Please go to the following page and choose a new password:
{% block reset_link %}
{{ 'http' }}://{{ 'localhost:8000' }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}
{% endblock %}

Your username, in case you've forgotten: {{ user.username }}

Thanks for using our site!

The {{ site_name }} team.

blog 中的所有其他模板

【问题讨论】:

  • 分享您的urls.py 代码和任何其他相关代码可能会有所帮助。
  • @TreyHunner 更新了代码 sn-ps。请帮忙

标签: python django


【解决方案1】:

我猜你的 URL 中的 - 是个问题,因为你的第一个正则表达式组贪婪地匹配 -

请注意,- 与第一个正则表达式匹配,但您将其用作分隔符。

而不是这种 URL 模式:

r'^user/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+)-(?P<token>.+)/$'

试试这个:

r'^user/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$'

不同之处在于我们将匹配组之间的- 更改为/,这是第一个组中不匹配的字符。

【讨论】:

  • 非常感谢@Trey Hunner,这是一个非常微小的变化,无法如此轻易地追踪。希望这篇文章也能帮助其他人
猜你喜欢
  • 2019-05-01
  • 2021-02-05
  • 1970-01-01
  • 2014-10-08
  • 2021-01-05
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多