2017-05-17 1 views
1

J'utilise le système d'authentification django par défaut avec peu de personnalisation. La fonctionnalité de base pour se connecter et se déconnecter fonctionne comme prévu. Le problème est avec l'extrait suivant dans mon formulaire de connexion modèle:La vue de connexion par défaut de Django remplit toujours le champ suivant

{% if next %} 
    <p>Please login to see this page.</p> 
{% endif %} 

C'est adapté de la vue de connexion exemple fourni dans la documentation officielle. L'idée est que si l'utilisateur essayait d'accéder à une page protégée sans se connecter, il serait redirigé vers la page de connexion et le paramètre next est défini sur l'URL de la page protégée. Cela fonctionne bien. Toutefois, lorsque l'utilisateur clique sur l'URL de connexion et accède directement à l'URL de connexion, le message d'erreur ci-dessus ne doit pas s'afficher. Mais dans ce cas, le paramètre next est défini sur LOGIN_REDIRECT_URL à partir de settings.py et nous voyons ce message d'erreur.

J'ai essayé de déboguer pour trouver où le problème est, et l'ai trouvé dans la classe django.contrib.auth.views.LoginView. Cette classe a une méthode get_success_url qui obtient l'URL de redirection à partir du paramètre next ou du LOGIN_REDIRECT_URL. Cette méthode est utilisée pour remplir le contexte du formulaire de connexion dans la méthode get_context_data, ce qui, à mon avis, est incorrect. La méthode dispatch utilise également le get_success_url pour obtenir l'URL de redirection, ce qui est correct car le but est réellement de rediriger.

Je ne suis pas sûr si mon explication est claire, laissez-moi savoir si ce n'est pas le cas. Y at-il une solution de contournement pour cela? Devrais-je soumettre un rapport de bug pour cela?

Utilisation:

  • python: 3,6 (Anaconda3, 64 bits)
  • Django: 1.11.1
  • django-enregistrement: 2,2

surélevé bug Django https://code.djangoproject.com/ticket/28229.

+0

pouvez-vous envoyer l'erreur ou la trace de la pile et également le code pour les paramètres et afficher le fichier – Exprator

+0

Il n'y a aucune trace de pile d'erreur. S'il vous plaît lire le texte de la question. La vue de connexion a la propriété 'next' définie quand elle ne devrait pas. C'est le problème. Il n'y a pas de vue non plus, j'utilise les vues fournies avec le système d'authentification par défaut de django. Et je n'ai rien personnalisé dans le fichier de paramètres au-delà de ce qui est généré par 'startproject'. –

+0

vous avez dit que vous voyez un message d'erreur? Qu'est-ce que c'est? – Exprator

Répondre

1

Ce n'est pas une solution, mais plus comme une solution de contournement:

En supposant que votre LOGIN_REDIRECT_URL est réglé sur /, vous pouvez écrire {% if next != "/" %} au lieu de {% if next %}.