是否可以拒绝通过身份验证的用户访问django.contrib.auth.views.password_reset?我想使用它,并将其设置为仅用于未登录。
我不知道该怎么做。我已经用reset做了所有的事情,但是所有用户都可以进入:/
更新:我就是这么做的:
views.py
def password_remind(request):
from django.contrib.auth.views import password_reset
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
return password_reset(request, template_name='remind_password.html', post_reset_redirect=reverse('password_remind_sent'))
def password_remind_sent(request):
from django.contrib.auth.views import password_reset_done
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
return password_reset_done(request, template_name='remind_password.html')
def password_remind_set_new(request, uidb36, token):
from django.contrib.auth.views import password_reset_confirm
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
return password_reset_confirm(request, template_name='set_new_password.html', post_reset_redirect=reverse('password_remind_changed'), token=token, uidb36=uidb36)
def password_remind_changed(request):
from django.contrib.auth.views import password_reset_complete
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
return password_reset_complete(request, template_name='set_new_password.html')urls.py:
url(r'^remind_password/$', 'password_remind', name='password_remind'),
url(r'^remind_password/sent/$', 'password_remind_sent', name='password_remind_sent'),
url(r'^remind_password/set_new/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'password_remind_set_new', name='password_remind_set_new'),
url(r'^remind_password/changed/$', 'password_remind_changed', name='password_remind_changed'),发布于 2011-02-18 21:44:52
当然,你可以在某些条件下将函数封装在你自己的函数中,并将你的url指向你的包装器函数。(注意传递您之前传递的任何参数...)
from django.contrib.auth.views import password_reset as real_password_reset
def password_reset(request, *args, **kwargs):
if request.user.is_authenticated():
# separate logic, redirect, whatever you wish.
return direct_to_template(request, "my_password_change.html", {})
return real_password_reset(request, *args, **kwargs)
(r'^password_reset/$', password_reset),发布于 2011-02-18 21:45:18
我会做一个装饰器函数,确保request.user不会通过身份验证,如果通过了身份验证,就会重定向到一个带有403代码的“拒绝访问”页面。
然后,在我的urls.py中,我将包含我想要锁定的视图的url模式(我记得大约有四个),并将方法调用包装在装饰器函数中。
这样的话,你根本不需要修改contri.auth的视图--你只需要把你的代码包起来就行了。
但是,您真的需要阻止用户访问重置密码视图吗?
更新:
示例装饰器函数(未经测试的代码!)
from django.http import HttpResponseForbidden
def unauthenticated_users_only(func):
"""
Decorator that checks whether a user
is logged in. 403s if not.
"""
def dec(request, *args, **kwargs):
if not request.user.is_authenticated():
return HttpResponseForbidden()
return func(request, *args, **kwargs)
dec.__doc__ = func.__doc__
return dec然后在您的主urls.py中,导入与重置流程相关的所有身份验证urls,并为每个urls导入并应用该函数:
url(r'^password/reset/$', unauthenticated_users_only(auth_views.password_reset), name='auth_password_reset'),https://stackoverflow.com/questions/5041644
复制相似问题