• 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ć?

Object Storage Arubacloud
0 głosów
162 wizyt
pytanie zadane 16 sierpnia 2020 w Python przez Dzango111 Użytkownik (660 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 Ekspert (344,860 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 (660 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 Ekspert (344,860 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ź 216 wizyt
pytanie zadane 8 marca 2023 w Python przez tonn204 Mądrala (7,440 p.)
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 16 kwietnia 2023 w Python przez tonn204 Mądrala (7,440 p.)
0 głosów
2 odpowiedzi 244 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...