Mon django modèle booléen variable ne fonctionne pas comme prévu en javascript

Voici le code dans mon base.html l'en-tête

    <script>
        var auth_status = "{{ user.is_authenticated }}"
    </script>

    {% block scripts %}  {% endblock %}

Le reste des scripts de mon site sont dans le bloc de scripts.

Dans un template enfant (dans le bloc de script et à l'intérieur des balises de script), j'ai ce code,

         if (auth_status) {
          //something
         }

L'erreur, à la main est auth_status est toujours Vrai, quand il doit être allumé et éteint en fonction de si l'utilisateur est connecté. Request_context est passé pour le modèle de sorte que ne devrait pas être l'erreur.

Grâce

  • Sightly sans rapport avec votre question, mais sachez que de faire if (user_is_authenticated) { do stuff; } peut être un problème de sécurité si vous avez réellement se fier à la valeur de cette variable JS. Un utilisateur peut modifier la valeur de la variable JS avant l'exécution.
  • Donc, vous dites qu'un utilisateur peut en quelque sorte mis auth_status = true? Serait contournement de la js var-être une solution valable? Ex: si({{ utilisateur.is_authenticated|ouinon:"vrai", "faux" }}) par rapport à si(auth_status) ??
  • Un utilisateur malveillant pourrait tirer juste le code source de votre page et remplacer ce qu'ils veulent... ce qu'ils veulent. Il y a n façon, vous pouvez appliquer tous sécurité côté client (qui est, en JS) et il y a pas de solution, tous les services de sécurité / contrôle d'accès doit être fait côté serveur (qui est dans votre code Python). JS n'est pas une extension de votre code d'application qui est exécutée de manière dynamique, c'est quelque chose de différent, avec des contraintes différentes.
  • Attendre, de sorte que même de django reinhardt, les variables de modèle sont à risque de falsification? Serait une solution raisonnable à avoir quelque chose qui nécessite user_auth être un html POST?
  • Tout dans le HTML qui est envoyé au client peut être gâché avec. Cela n'affectera pas le code côté serveur, en aucune façon, mais le HTML est envoyé au client et votre serveur est fait avec elle, c'est juste la façon dont il fonctionne. Concernant votre deuxième question, je ne sais pas ce que vous essayez de le faire, donc je ne peux pas vous en dire beaucoup plus.
  • Ah ok, donc juste pour m'assurer que je comprends ce que vous dites, à l'aide de la balise de modèle {{ utilisateur.is_authenticated }} n'est pas utile parce que quelqu'un peut juste modifier cette valeur. Des trucs qui requiert une authentification doit être dans la forme de html des messages sur le serveur pour un contrôle d'authentification là?
  • Oui, vous pouvez utiliser en toute sécurité request.user.is_authenticated() dans le code python. C'est OK pour utiliser {% if user.authenticated %} dans le code du modèle, comme ce sera calculée côté serveur, c'est à dire avant le code HTML est envoyé au client. Le générique de la règle de base est que tout ce qui se trouve au client peut être modifié, tout ce qui n'arrive jamais à eux ne le peuvent pas. (Au moins, pas de cette façon 😉 )