我已经写了一小部分中间件,用于捕获用户是否使用临时密码,如果是,则将它们重定向到强制他们创建新密码的页面。我的问题是,当用户登录并且没有使用临时密码(即他们手动进入更改密码URL)时,页面可以正常工作,但是当他们使用临时密码时,来自中间件的重定向会生成403 Forbidden页面。Django process_view中间件导致403被禁止
中间件做一件事在process_view临时密码校验后,但这是相关代码:
class MyMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
if request.user.is_authenticated():
try:
if request.user.get_profile().using_temp:
return HttpResponseRedirect(reverse('change_password'))
except Object.DoesNotExist:
pass
# Not using temp password, let the request process
return None
注意,呈现直接的模板可以使用的东西,如选择render_to_response,修复问题,但这会导致浏览器的URL不能跟上,以及它无法真正退出它呈现的页面。
这不是引发403的代码。但是,这段代码会导致无限重定向。 – 2011-01-11 13:23:35
HttpResponseRedirect行导致403,在Django内部的某个地方,实际的403被引发。如果该行被更改为'return HttpResponse(“test”)',它可以正常工作,所以它确实与重定向触发有关。 – 2011-01-11 14:13:05