2015-03-20 15 views
7

Supponiamo che un utente sia nella pagina /some_url/ su un sito con django-allauth. Quando si clicca "Login" ottengono inviato a un URL del tipo:Override Iscrizione di Django allauth URL "successivo" di reindirizzamento

/accounts/login/?next=/some_url/ 

Se sono già un utente registrato, dopo l'accesso qui, ottengono inviati al /some_url/, che va bene.

Ma se non sei iscritto, e cliccare su "Sign Up", vengono inviati a:

/accounts/signup/?next=/some_url/ 

Supponiamo che voglio inviare l'utente a una certa esperienza onboarding, a /onboarding/, subito dopo che Iscriviti.

Qual è il modo più semplice per ignorare il comportamento predefinito di allauth e inviare l'utente a /onboarding/ anche se è specificato uno next=/some_url/?

risposta

9

Il modo più semplice sarebbe quello di ignorare il modello account/signup.html con la propria copia. Se si esamina tale modello si vedrà la seguente sezione:

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

Se si rimuove la parte if/endif e cambiare il valore all'interno, la pagina di registrazione reindirizzerà ad una pagina specifica, anche se si passa un argomento next nell'URL:

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

Anche se non si adatta bene al mio caso, è una buona risposta. Nel mio caso, temo che non tutti gli utenti accedano immediatamente dopo l'iscrizione. Quindi il loro URL potrebbe ancora ottenere un parametro "successivo". Utilizzerò un middleware per effettuare il reindirizzamento e useremo un contatore per garantire che il reindirizzamento avvenga solo una volta. Ya, soluzione complicata, ma puoi garantire "/ onboarding /" è visitato una volta – ZZY

+0

Non sarebbe meglio @Selcuk fare qualcosa come 'value =" {% url 'onboarding_urlname'%} "' – unlockme

+0

@unlockme Sarebbe ideale quando possibile. – Selcuk