2016-06-01 14 views
0

私はすでにthisを読んでいますが、答えは私のニーズに合っていません。ミドルウェアは無限リダイレクトを行います

class RedirectIfUserIsNotActiveMiddleware(object): 
    """ 
    Middleware to redirect if account is disabled 
    """ 
    @staticmethod 
    def process_request(request): 
     if not request.user.is_active: 
      try: 
       # test to see if not already on the right url: 
       a = resolve(request.path) 
       if a.url_name != settings.URL_REDIRECT_USER_NOT_ACTIVE: 
        return HttpResponseRedirect(
         reverse_lazy(settings.URL_REDIRECT_USER_NOT_ACTIVE)) 

      # request.path do a 404 if URL unknown -> do nothing : 
      except Resolver404: 
       pass 

そして、私はこのここに追加しました::

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
    'third_party.hqf_middleware.RedirectIfUserIsNotActiveMiddleware', 
) 

をしかし、アカウントが無効になっているとき、私は上のメッセージで無限ループを取得し、私はこの非常に単純なミドルウェアを作った

webbrowser: "mywebsite.comはあなたを何回もリダイレクトしました。"私の設定で

私はこれがあります。

URL_REDIRECT_USER_NOT_ACTIVE = 'my_home_profile_account_desactivated' 

をそして私が取得しようとしているURLは、常に(ステップによっても、各時間ステップ)である/en/my-home/profile/edit

私は何をしないのですか?

+0

なぜミドルウェアを使用したいのですが、なぜユーザー認証時にリダイレクトできないのですか? –

+0

これは私の質問ここで説明:http://stackoverflow.com/questions/35337120/is-there-a-way-to-add-custom-code-to-login-requiredと私は提案を適用しようとしているAnswer –

+0

ミドルウェアに印刷/ロギングを追加して、 'a.url_name'と' settings.URL_REDIRECT_USER_NOT_ACTIVE'の内容を確認してください。 – Alasdair

答えて

0

my_home_profile_account_desactivatedビューがログインページにリダイレクトされているように見えます。ミドルウェアはmy_home_profile_account_desactivatedにリダイレクトされ、リダイレクトループが作成されます。

ミドルウェアを変更して認証ループを解除すると、認証されたユーザーと非アクティブなユーザーだけがリダイレクトされるようにすることができます。

@staticmethod 
def process_request(request): 
    if request.user.is_authenticated() and not request.user.is_active: 
     ... 
+0

を参照してくださいこれは正しい答えかもしれません。私は別の方法で私の問題を解決しました:is_activeはdjangoコア自体のどこかで使用されていたので、私は自分自身の "アクティブ"フィールドを作成して動作していると推測しました。 –

関連する問題