Django内置身份验证,用于重置密码链接,切断url中的令牌

问题描述 投票:0回答:1

我正在使用内置的Django身份验证来发送电子邮件以重置密码。发送电子邮件是有效的,但是当我尝试按照指向页面的链接重置我的密码时,Django会更改URL(类似于我想的重定向),然后尝试将URL解析为'http://127.0.0.1:8000/registration/USER_ID/set-password',而不是' http://127.0.0.1:8000/registration/USER_ID/TOKEN”。然后Django抛出一个错误:'NoReverseMatch at / registration / reset / USER_ID / set-password /'

我没有名为“set-password”的文件,在我的代码(模板,URLconf)中没有任何地方我有“set-password”。

urlpatterns = [

...
...

path('password_reset/', auth_views.PasswordResetView.as_view(),
  name='password_reset'),

path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(),      
  name='password_reset_done'),

path('reset/<uidb64>/<token>/', 
  auth_views.PasswordResetConfirmView.as_view(),    
  name='password_reset_confirm'),

path('reset/done', auth_views.PasswordResetCompleteView.as_view(), 
  name='password_reset_complete'),
]

我正在使用docs(https://docs.djangoproject.com/en/2.1/topics/auth/default/#using-the-views)中的代码来进行URL匹配,所以我没有创建任何新的东西。似乎Django正在从URL中删除令牌?

django django-authentication
1个回答
0
投票

所以,如果将来有其他人遇到同样的问题,我想出了答案。在“password_reset_confirm”模板中,我将表单的操作设置为action="{% url 'password_reset_confirm' %}",这导致Django在页面最初加载时尝试构造该URL。因为'password_reset_confirm'有参数,所以我得到了NoReverseMatch错误(因为我没有在动作URL中提供任何参数)。从表单中删除action解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.