私は、ユーザが一時パスワードを使用している場合にキャッチする小さなミドルウェアを作成しました。もしそうなら、それらを新しいパスワードを作成するページにリダイレクトします。私の問題は、ユーザーがログインして一時パスワードを使用していない(つまり、パスワードパスワードを手動で変更する)ときにページが正常に動作することです。しかし、一時パスワードを使用している場合、ミドルウェアからのリダイレクトは403禁止ページ。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を発生させるコードではありませんが、このコードはそのままでは無限のリダイレクトになります。 –
HttpResponseRedirect行が403を引き起こしていて、Django内のどこかに実際の403が呼び出されています。行が 'HttpResponse( "test")を返すように変更された場合、正常に動作します。したがって、リダイレクトが発生すると関係します。 –
このように、これを行うための最良の方法は何か、またはミドルウェアにリダイレクトの処理を停止させる方法が問題だと思います。 –