2015-03-20 12 views
7

Załóżmy, że użytkownik znajduje się na stronie /some_url/ na stronie z django-allauth. Po kliknięciu „Zaloguj” one wysyłane do adresu URL, takich jak:Zastąp rejestrację Django allauth "następny" URL przekierowania

/accounts/login/?next=/some_url/ 

Jeśli jesteś już zarejestrowanym użytkownikiem, po zalogowaniu się tu one wysyłane do /some_url/, który jest w porządku.

Ale jeśli nie są one rejestrowane, i kliknij „zapisz się” one wysyłane do:

/accounts/signup/?next=/some_url/ 

Przypuśćmy, że chcesz wysłać użytkownikowi pewnego Onboarding doświadczenia w /onboarding/, prosto po Zapisz się.

Jaki jest najprostszy sposób na zastąpienie domyślnego zachowania allauth i wysłanie użytkownika do /onboarding/, nawet jeśli podano next=/some_url/?

Odpowiedz

9

Najprostszym sposobem jest przesłonięcie szablonu account/signup.html za pomocą własnej kopii. Jeśli zbadać ten szablon pojawi się następujący punkt:

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

Jeśli usuniesz if/endif udział i zmienić wartość wewnątrz, strona zarejestruj odsyła do konkretnej strony, nawet jeśli przechodzą next argumentu w adresie URL:

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

Chociaż nie pasuje do mojego przypadku, jest to dobra odpowiedź. W moim przypadku obawiam się, że nie wszyscy użytkownicy będą się logować natychmiast po rejestracji. Wtedy ich URL nadal może otrzymać "następny" parametr. Zamierzam użyć oprogramowania pośredniego do przekierowania i użyć licznika, aby zapewnić, że przekierowanie ma miejsce tylko raz. Ya, skomplikowane rozwiązanie, ale może zagwarantować "/ onboarding /" jest odwiedzane raz – ZZY

+0

Czy nie byłoby lepiej @Selcuk zrobić coś takiego jak "value =" {% url 'onboarding_urlname'%} "' – unlockme

+0

@unlockme To byłoby idealne, gdy możliwy. – Selcuk

Powiązane problemy