2015-03-20 13 views
7

Angenommen, ein Benutzer ist auf der Seite /some_url/ auf einer Website mit Django-Allauth.Override Django allauth Anmeldung "nächste" Weiterleitung URL

/accounts/login/?next=/some_url/ 

Wenn sie bereits ein registrierter Benutzer sind, nachdem hier anmelden, sie an die /some_url/ zugesandt bekommen, was in Ordnung ist: Wenn Sie auf „Login“ bekommen sie zu einer URL wie gesendet.

Aber wenn sie nicht registriert sind, und sie klicken Sie auf „registrieren“, werden sie verschickt an:

/accounts/signup/?next=/some_url/ 

Angenommen, möchte ich den Benutzer zu einem gewissen Onboarding Erfahrung schicken, bei /onboarding/, gerade nachdem sie Anmelden.

Was ist die einfachste Möglichkeit, das Standardverhalten von allauth zu überschreiben und den Benutzer an /onboarding/ zu senden, selbst wenn next=/some_url/ angegeben ist?

Antwort

9

Der einfachste Weg wäre, die Vorlage account/signup.html mit Ihrer eigenen Kopie zu überschreiben. Wenn Sie diese Vorlage prüfen finden Sie im folgenden Abschnitt:

{% if redirect_field_value %} 
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /> 
{% endif %} 

Wenn Sie den if/endif Teil entfernen und den Wert innerhalb ändern, wird die Anmeldeseite auf eine bestimmte Seite umleiten, auch wenn Sie ein next Argument übergeben in der URL:

<input type="hidden" name="{{ redirect_field_name }}" value="/onboarding/" /> 
+0

Obwohl passt nicht gut zu meinem Fall, es ist eine gute Antwort. In meinem Fall befürchte ich, dass nicht alle Benutzer sofort nach der Anmeldung einloggen werden. Dann kann ihre URL immer noch einen "nächsten" Parameter erhalten. Ich werde eine Middleware für die Umleitung verwenden und einen Zähler verwenden, um sicherzustellen, dass die Umleitung nur einmal erfolgt. Ya, komplizierte Lösung, aber kann garantieren, dass "/ onboarding /" einmal besucht wird – ZZY

+0

Wäre es nicht besser @Selcuk etwas zu tun wie "Wert =" {% url 'onboarding_urlname'%} "' – unlockme

+0

@unlockme Das wäre ideal wenn möglich. – Selcuk