2011-08-08 18 views
10

Bezpieczeństwo nie stanowi problemu.Jak sprawdzić, czy użytkownik Django jest nadal zalogowany tylko po stronie klienta?

Muszę wyświetlić "Jesteś zalogowany jako nazwa użytkownika" na stronie, ale nie chcę usunąć widok z pamięci podręcznej tylko dlatego mam nadzieję, że będę mógł to zrobić w javascript.

Nie chcę robić niczego krytycznego w tym procesie, po prostu sprawdź, czy plik cookie jest nadal ważny, a jeśli tak, wyświetl wiadomość powitalną, przepraszam, wyświetl link logowania.

Istotą jest, aby nie trafić do bazy danych i oszczędzić serwer, jak dostaliśmy 120000 użytkowników dziennie na tej jednej maszynie, więc muszę:

  • nazwa django.contrib.auth cookies więc mogę czytać to;
  • dane mam czytać z niego zdecydować, użytkownik jest nadal zalogowany
  • sposób wyodrębnić nazwę użytkownika z niego

Jeśli nie mogę znaleźć sposób, aby to zrobić, Wrócę do stworzenia backendu uwierzytelniania, który ustawi dodatkowy plik cookie podczas logowania i usuwania go podczas wylogowywania.

Odpowiedz

10

Plik cookie istnieje i ma datę wygaśnięcia. Możesz sprawdzić, czy jest to nadal prawidłowe, co sugerowałoby, że są one zalogowane. Nie możesz uzyskać nazwy użytkownika w ten sposób, musisz dodać niestandardowy plik cookie.

+0

to co myślałem. +1 za potwierdzenie. Zaakceptuj odpowiedź, jeśli podasz mi nazwę pliku cookie. –

+0

"sessionid" jest domyślną nazwą pliku cookie sesji Django – seriyPS

+0

Jak napisałem seriyPS, zrobiłem już :-) –

2

Wpisz w szablonie kod podobny do poniższego.

{% block top %}<script async="async" defer="defer" type="text/javascript" src="{% static 'users/js/geo.js' %}" 

{% if user.is_authenticated %} data-authenticated="true" {% endif %} 

></script 
>{% endblock %} 

i sprawdź, czy uwierzytelniony z kodem jak:

unsafe_authenticated = 'true' === document.currentScript.dataset.authenticated; 
+0

Znacznik 'statyczny' nie został rozpoznany przez Django, ale gdy użyłem go, jest w porządku. Dzięki za to. – jfunk

Powiązane problemy