2016-06-01 19 views
0

Ich habe bereits this gelesen, aber die Antwort passt nicht meine Bedürfnisse.Middleware tut eine unendliche Umleitung

ich diese sehr einfache Middleware gemacht haben:

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 

Und ich habe das hier hinzugefügt:

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', 
) 

Aber wenn das Konto deaktiviert ist, erhalte ich eine Endlosschleife mit der Meldung auf der webbrowser: "mywebsite.com hat dich zu oft umgeleitet."

In meinen Einstellungen Ich habe dies:

URL_REDIRECT_USER_NOT_ACTIVE = 'my_home_profile_account_desactivated' 

Und die URL ich versuche zu bekommen immer (auch bei jedem Schritt für Schritt) /en/my-home/profile/edit

Was bin ich?

+0

Warum möchten Sie Middleware, warum können Sie nicht umleiten, wenn Benutzer authentifizieren? –

+0

Es wird in meiner Frage hier erklärt: http://stackoverflow.com/questions/35337120/is-there-a-way-to-add-custom-code-to-login-required und ich versuche, die vorgeschlagene anzuwenden Antwort –

+0

Fügen Sie Ihrer Middleware etwas Druck/Protokollierung hinzu, um herauszufinden, was 'a.url_name' und' settings.URL_REDIRECT_USER_NOT_ACTIVE' sind. – Alasdair

Antwort

0

Es sieht so aus, als ob die my_home_profile_account_desactivated Ansicht auf Ihre Anmeldeseite umleitet, und dann leitet die Middleware zurück zu my_home_profile_account_desactivated und erstellt eine Umleitungsschleife.

Sie sollten in der Lage sein, die Authentifizierungsschleife zu unterbrechen, indem Sie die Middleware ändern, sodass nur Benutzer weitergeleitet werden, die authentifiziert und inaktiv sind.

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

Danke, das könnte die richtige Antwort sein. Ich habe mein Problem auf andere Weise gelöst: Ich vermutete, dass is_active irgendwo von django core selbst verwendet wurde, also habe ich mein eigenes "aktives" Feld erstellt und es funktioniert. –