2010-02-14 3 views
10

je vais à ma page web http://localhost:8000/listings/post/, il échoue le testLa redirection de connexion Django ne fonctionne pas?

@user_passes_test(lambda u: u.is_authenticated() and u.get_profile().shipper) 

comme prévu, et me redirige vers http://localhost:8000/login/?next=/listings/post/ comme il est censé le faire, mais quand je me connecte à nouveau, il ne me redirige pas revenir à cette page comme c'est supposé le faire. Il me faut /accounts/profile/. Je n'ai pas défini redirect_field_name n'importe où, donc il devrait être à la recherche de la variable par défaut next. Le bit urls.py concerné ressemble à ce

url(r'^login/$', 'django.contrib.auth.views.login', name='login'), 

Alors, quelles sont les causes possibles de cela?

Répondre

15

nécessaire pour ajouter

<input type="hidden" name="next" value="{{ next }}" /> 

Pour mon formulaire de connexion. Il était affiché à l'URL de connexion sans le jeton next, et puis en essayant de rediriger.

+1

Donc, j'avais raison à la fin, votre prochaine valeur n'a pas été définie, c'est pourquoi elle vous a redirigé vers LOGIN_REDIRECT_URL. – stefanw

+2

Eh bien ... d'accord, d'accord. Vous pouvez avoir le chèque alors. Je pensais que c'était réglé parce qu'il apparaissait dans l'URL. Mais vous n'avez toujours pas vraiment résolu le problème;) – mpen

+0

De quelle forme avez-vous besoin pour ajouter ceci? –

4

Il vous redirige vers la variable de paramètres LOGIN_REDIRECT_URL.

Cela se produit lorsque les conditions suivantes est remplie:

if not redirect_to or '//' in redirect_to or ' ' in redirect_to: 
       redirect_to = settings.LOGIN_REDIRECT_URL 

Très probablement votre variable « suivant » est vide ou contient des ordures.

+1

Euh .... non. Comme je l'ai dit, je suis envoyé à 'http: // localhost: 8000/login /? Next =/listings/post /'. 'next' contient la valeur correcte. – mpen

Questions connexes