• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zabezpieczyć podstrony (np. "/mojastrona/DoUkryciaAdres"), żeby tylko zalogowany mógł je widzieć?

0 głosów
332 wizyt
pytanie zadane 16 sierpnia 2020 w Python przez Dzango111 Użytkownik (670 p.)

Chciałbym to zrobić możliwie jak najbardziej po chłopsku np. 

{% if user.is_authenticated %}

    {% extends "baza.html" %}

    {% block content %}
        Test działania
    {% endblock %}

{% else %}

    (jakaś strona powiadamiająca, by się zalogować)

{% endif %}

Tylko że w tym przypadku zostaję poinformowany o błędzie: 

TemplateSyntaxError at /strona/

Invalid block tag on line 11: 'else'. Did you forget to register or load this tag?

 

1 odpowiedź

0 głosów
odpowiedź 16 sierpnia 2020 przez adrian17 Mentor (355,220 p.)
wybrane 17 sierpnia 2020 przez Dzango111
 
Najlepsza

Musiałbyś pokazać więcej kodu, bo na razie to wygląda jakbyś miał błąd składniowy gdzieś w templacie.

Natomiast... sprawdzanie czy ktoś jest zalogowany w ogóle nie powinno być w templacie. Sprawdzanie `user.is_authenticated` jest zazwyczaj w widoku... albo jeszcze lepiej, bez żadnego kodu, owijając po prostu widok w dekorator `login_required`.

https://docs.djangoproject.com/en/3.1/topics/auth/default/#the-login-required-decorator

https://docs.djangoproject.com/en/3.1/topics/auth/default/#limiting-access-to-logged-in-users

komentarz 16 sierpnia 2020 przez Dzango111 Użytkownik (670 p.)

W templatce chyba jest wszystko w porządku, powyższym kodem chciałem raczej tylko zilustrować dobrze o co mi chodzi. Natomiast, dlaczego sprawdzanie zalogowania nie powinno być w templatce? Mam tam np. wyświetlanie imienia zalogowanego:

{% if user.is_authenticated %}
   Witaj 
   <a href="#">{{user.get_username}}!</a>
{% else %}
    Zaloguj się
{% endif %}

Chodzi o bezpieczeństwo?

2
komentarz 17 sierpnia 2020 przez adrian17 Mentor (355,220 p.)

Mam tam np. wyświetlanie imienia zalogowanego:

To jest fajne.

Natomiast, dlaczego sprawdzanie zalogowania nie powinno być w templatce? 

Template jest "wykonywany" na sam koniec wykonywania się widoku. Więc jeśli takiego "if"a zostawisz w samym templacie to co, będziesz wykonywać masę kodu i różne zapytania bazodanowe, nawet jeśli wiesz że user nie jest zalogowany i nie powinien mieć do tego dostępu? ;) A jeśli już masz takie zabezpieczenie (w postaci np `login_required` przed widokiem), to po co dodawać sprawdzanie w templacie, jak sam widok przekieruje na `/login` lub `/not_logged_message`? :D

Podobne pytania

0 głosów
1 odpowiedź 670 wizyt
pytanie zadane 8 marca 2023 w Python przez tonn204 Mądrala (7,470 p.)
0 głosów
1 odpowiedź 652 wizyt
pytanie zadane 16 kwietnia 2023 w Python przez tonn204 Mądrala (7,470 p.)
0 głosów
2 odpowiedzi 562 wizyt

93,765 zapytań

142,721 odpowiedzi

323,373 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...