python - 豁免网址有问题
问题描述
嗨,我试图在我的项目中免除一个 url,以便用户可以绕过中间件并在不登录的情况下重置他们的密码。但是我放在 LOGIN_EXEMPT_URLS 中的 url 似乎没有解决这个问题,而是重置链接-密码将用户重定向到帐户/登录。
设置.py:
LOGIN_EXEMPT_URLS = {
r'^account/logout/$',
r'^account/register/$',
r'^account/reset-password$',
r'^account/reset-password/done/$',
r'^account/reset-password/confirm(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/$',
r'^account/reset-password/complete/$',
}
中间件.py:
url_is_exempt = any(url.match(path)for url in EXEMPT_URLS)
if path == reverse('accounts:logout').lstrip('/'):
logout(request)
if request.user.is_authenticated and url_is_exempt:
return redirect(settings.LOGIN_REDIRECT_URL)
elif request.user.is_authenticated or url_is_exempt:
return None
else:
return redirect(settings.LOGIN_URL)
网址.py:
urlpatterns = [
url(r'^$', views.home),
url(r'^login/$', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
url(r'^logout/$', auth_views.LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
url(r'^register/$', views.register, name='register'),
url(r'^profile/$', views.view_profile, name='view_profile'),
url(r'^profile/edit/$', views.edit_profile, name='edit_profile'),
url(r'^change-password/$', views.change_password, name='change_password'),
url(r'^reset-password/$',
PasswordResetView.as_view(template_name='accounts/reset_password.html',
success_url=reverse_lazy('accounts:password_reset_done')), name='reset_password'),
url(r'^reset-password/done/$', PasswordResetDoneView.as_view(), name='password_reset_done'),
url(r'^reset-password/confirm(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/$',
PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
url(r'^reset-password/complete/$', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
主/urls.py:
urlpatterns = [
path('', views.login_redirect, name='login_redirect'),
path('admin/', admin.site.urls),
path('account/', include('accounts.urls', namespace='accounts')),
]
html: 这是在 {% else %} (user.is.authenticated)
<ul class="navbar-nav ml-auto">
<li class='nav-item'>
<a class="nav-link" href='{% url 'accounts:reset_password' %}'>Forgotten Password?</a>
html 中的所有内容都已正确格式化,但我认为有些代码有问题。对于那个很抱歉
仅供参考:注册豁免作品!
所以有什么问题?谢谢
解决方案
您的豁免正则表达式r'^account/reset-password$'
没有尾部斜杠。这与您的 URL 模式中的正则表达式不一致r'^reset-password/$'
,后者确实有一个斜杠。
推荐阅读
- selenium - 在 Selenium 中单击按钮没有响应
- autohotkey - 使用 AutoHotKey 防止物理按键与发送的按键发生冲突
- r - 带函数的 for 循环(来自 r 包)问题
- javascript - React 功能组件未使用新道具更新
- node.js - 如何优化 dijsktra 寻路查询以提高速度
- html - 需要完整日历的解决方案,其中包含事件列表和特定事件页面的链接
- java - 员工类:无法解析 EmployeeMain 中的符号
- sql - Oracle SQL 动态开始和结束日期
- javascript - Chartjs 用 csv 显示图形
- javascript - 为什么显示 ,Uncaught TypeError: $(...).tableHTMLExport is not a function