我需要有一個功能告訴我,如果一個Django會話ID當前被驗證或沒有。我知道這已經內置到django中,我的工作很好。手動驗證目前Django的會話ID認證
但是我有被傳遞會話ID的外部應用程序,而當它傳遞會話ID字符串返回Django的,我需要驗證此會話ID是有效的,目前認證。
從哪裏開始重用一些內置功能的Django 1.2了?
感謝
我需要有一個功能告訴我,如果一個Django會話ID當前被驗證或沒有。我知道這已經內置到django中,我的工作很好。手動驗證目前Django的會話ID認證
但是我有被傳遞會話ID的外部應用程序,而當它傳遞會話ID字符串返回Django的,我需要驗證此會話ID是有效的,目前認證。
從哪裏開始重用一些內置功能的Django 1.2了?
感謝
你可以做這樣的(未測試,但它顯示了一種可能的方式):
from django.utils.importlib import import_module
from django.conf import settings
from django.contrib.auth import get_user
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth import SESSION_KEY, BACKEND_SESSION_KEY, load_backend
engine = import_module(settings.SESSION_ENGINE)
session = engine.SessionStore(YOUR_SESSION_KEY)
try:
user_id = session[SESSION_KEY]
backend_path = session[BACKEND_SESSION_KEY]
backend = load_backend(backend_path)
user = backend.get_user(user_id) or AnonymousUser()
except KeyError:
user = AnonymousUser()
if user.is_authenticated():
print "User"
else:
print "Guest"
下面是在用戶登錄源django.contrib.auth.__init__.login
線。
request.session[SESSION_KEY] = user.id
註銷刷新會話完全,因此該密鑰的存在是經過身份驗證的用戶。
from django.contrib.auth import SESSION_KEY
from django.contrib.sessions.models import Session
try:
session = Session.objects.get(session_key=my_key)
session.get_decoded()[SESSION_KEY]
return (True, "Authenticated")
except (Session.DoesNotExist, KeyError):
return (False, "Not authenticated")
PS:如果你沒有使用數據庫會話,aeby會從會話引擎中獲得很好的效果。
注意:這隻適用於數據庫支持的會話存儲。你會考慮使用緩存,文件或基於cookie的,這是行不通的。 – drdaeman 2015-08-08 21:43:21
「YOUR_SESSION_KEY」是嘗試之前使用/ except塊,這樣就不會,如果YOUR_SESSION_KEY也不存在這個完全失敗? – mikemaccana 2012-02-08 15:51:00