2011-08-08 46 views
10

Bảo mật không phải là vấn đề ở đây.Cách kiểm tra xem người dùng Django vẫn chỉ đăng nhập từ phía máy khách?

Tôi cần hiển thị 'Bạn đã đăng nhập dưới dạng tên người dùng' trên trang nhưng không muốn xóa chế độ xem khỏi bộ nhớ cache chỉ vì điều này vì vậy tôi hy vọng có thể làm điều đó trong javascript.

Tôi không muốn thực hiện bất kỳ điều gì quan trọng với quy trình này, chỉ cần kiểm tra xem cookie có còn hiệu lực không và nếu có, hiển thị thông báo chào mừng, hiển thị liên kết đăng nhập.

Toàn bộ vấn đề là không trúng cơ sở dữ liệu và phụ tùng máy chủ, như chúng tôi đã nhận 120000 người dùng một ngày trên máy tính đơn lẻ này, vì vậy tôi cần:

  • tên của cookie django.contrib.auth vì vậy tôi có thể đọc nó;
  • dữ liệu tôi phải đọc từ nó để quyết định người sử dụng vẫn còn đăng nhập
  • một cách để trích xuất tên người dùng từ nó

Nếu tôi không thể tìm thấy một cách để làm điều này, Tôi sẽ quay lại để tạo một chương trình phụ trợ xác thực để đặt cookie bổ sung khi đăng nhập và xóa nó khi đăng xuất.

Trả lời

10

phiên họp cookie tồn tại và có ngày hết hạn. Bạn có thể kiểm tra xem liệu điều đó vẫn hợp lệ, điều này có nghĩa là họ đã ghi lại nó. Tuy nhiên, bạn không thể lấy tên người dùng theo cách này, bạn sẽ phải thêm cookie tùy chỉnh.

+0

Đó là những gì tôi nghĩ. +1 để xác nhận. Chấp nhận câu trả lời nếu bạn cho tôi tên của cookie. –

+0

"sessionid" là tên mặc định của cookie phiên Django – seriyPS

+0

Như seriyPS nói, tôi đã làm :-) –

2

Có mã như sau trong mẫu của bạn.

{% 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 %} 

Và kiểm tra xem chứng thực với các mã như bạn:

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

Thẻ 'static' không được nhận bởi Django, nhưng một khi tôi đã sử dụng url trần thì nó vẫn ổn. Cám ơn vì cái này. – jfunk

Các vấn đề liên quan