0

ユーザーが一時的なパスワードを使用しているかどうかをキャッチし、使用している場合は新しいパスワードの作成を強制するページにリダイレクトする、小さなミドルウェアを作成しました。私の問題は、ユーザーがログインしていて一時パスワードを使用していない場合 (つまり、手動でパスワード変更 URL に移動した場合) にページが正常に機能することですが、一時パスワードを使用している場合、ミドルウェアからのリダイレクトにより 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 が追跡できなくなり、レンダリングしたページを実際に終了できなくなることに注意してください。

4

3 に答える 3

2

まず、例ではインデントがずれていると思いますが、現在のパスchange_password の URL であることを検出する解決策として、次の方法はいかがでしょうか。これにより、進行中の無限リダイレクトが取り除かれます。

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 and request.path != reverse('change_password'):
          return HttpResponseRedirect( reverse( 'change_password' ) )
      except Object.DoesNotExist:
          pass
   # Not using temp password, let the request process
   return None
于 2011-01-11T15:02:04.223 に答える
0

どのバージョンのジャンゴを使用していますか?

最新のベータ版を使用している場合は、ログの設定が役立つ場合があります

http://docs.djangoproject.com/en/dev/topics/logging/

于 2011-01-11T13:22:43.020 に答える
0

ここではDjango Debug Toolbarが役立つかもしれません。リダイレクトをトラップし、実際にリダイレクトする前にリダイレクト先を表示できます。これは、壊れたリダイレクトを実行するのに役立ちます。

そうは言っても、一時パスワードを持つユーザーには別の「パスワード変更」ページを使用することをお勧めします。これにより、アクセス許可のチェックを別の方法で処理できるようになります。ページに@login_requiredデコレータが含まれている可能性があり、一時的なパスワードは「実際に」ログインしているとは見なされない場合があります。

于 2011-01-11T15:00:08.193 に答える