Django 在密码重置时不会重定向到正确的路径

Posted

技术标签:

【中文标题】Django 在密码重置时不会重定向到正确的路径【英文标题】:Django does not redirect to correct path on password reset 【发布时间】:2022-01-14 20:10:47 【问题描述】:

在 django 密码重置中,路径名为 password-reset/done/,django 将我重定向到 password_reset/done/ 页面。除了密码重置/密码重置确认不起作用之外,没有重定向工作。返回 /user/reset/done/。

用户/密码重置/正在工作:

当 POST 表单返回默认 django 页面和如下链接:

返回链接应该是 'password-reset/done/' 但返回链接是 : 'password_reset/done/'

我的用户应用 urls.py

from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.auth import views as auth_views

app_name = "user"


urlpatterns = [
path('register/',views.register,name="register"),
path('login/',views.loginUser,name="login"),
path('logout/',views.logoutUser,name="logout"),
path('profile/',views.profileUser,name="profile"),
path('password-reset/',auth_views.PasswordResetView.as_view(template_name="password_reset.html"), name="password_reset"),
path('password-reset/done/',auth_views.PasswordResetDoneView.as_view(template_name="password_reset_done.html") , name="password_reset_done"),
path('password-reset-confirm/<uidb64>/<token>/',auth_views.PasswordResetConfirmView.as_view(template_name="password_reset_confirm.html"), name="password_reset_confirm"),
path('password-reset-complete/',auth_views.PasswordResetCompleteView.as_view(template_name="password_reset_complete.html"), name="password_reset_complete"),

] 

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的根项目 urls.py

from django.contrib import admin
from django.urls import path
from django.urls.conf import include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth import views


from article import views

urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index, name="index"),
path('about/',views.about, name="about"),
path('articles/',include("article.urls")),
path('user/',include("user.urls")),
path('user/', include('django.contrib.auth.urls')),
path('contact/',views.contact, name="contact"),

]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

【参考方案1】:

您的 urlpatterns 中有 2 倍的路径“user/”。只需根据您喜欢的 urlpatterns 删除其中一个路径。您不需要自己定义用户/网址,因为您几乎 100% 地遵循内置的身份验证系统,而“_”的细微差别。所以我会删除你的 users/urls.py。

参见https://docs.djangoproject.com/en/3.2/topics/auth/default/中的“身份验证视图”

【讨论】:

当我删除 users/urls.py 时出现错误 NoReverseMatch at / 'user' is not a registered namespace when I remove the path('user/', include('django.contrib. auth.urls')),我收到错误 Reverse for 'password_reset_confirm' not found。 'password_reset_confirm' 不是有效的视图函数或模式名称。 对不起,我不够清楚:我不是要删除 users/urls.py,而是要从 urlspattern 中删除它(删除 'path('user/',include("user.urls" ))')。现在让我们继续解决方案 2 并从 urlspattern 中删除 path('user/', include('django.contrib.auth.urls')) 。然后查看您仍然收到哪些错误消息

以上是关于Django 在密码重置时不会重定向到正确的路径的主要内容,如果未能解决你的问题,请参考以下文章

Joomla 3和VM密码重置重定向到VM寄存器

使用gmail和Django注册不会重置密码电子邮件

iOS重定向到特定的密码重置页面?

重定向到以前的 url,其他 url 除外

无法为 Django 的重置密码流程创建集成测试

Microsoft 密码重置 - 包含重置后重定向 URI 的传递参数