我编写了一小部分中间件,可以捕获用户是否使用临时密码,如果是,则将他们重定向到强制他们创建新密码的页面。我的问题是,当用户登录并且不使用临时密码(即他们手动转到更改密码 URL)时,页面可以正常工作,但是当他们使用临时密码时,来自中间件的重定向会产生 403 Forbidden 页面.
在临时密码检查之后,中间件在 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 无法跟随,并且无法真正退出它渲染的页面。