ada*_*dam 4 python django django-authentication django-sessions django-users
我需要有一个函数告诉我django会话ID当前是否已经过身份验证.我知道这已经内置到django中,我的工作正常.
但是我有一个传递会话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"
Run Code Online (Sandbox Code Playgroud)
这是源django.contrib.auth.__init__.login中记录用户的一行.
request.session[SESSION_KEY] = user.id
Run Code Online (Sandbox Code Playgroud)
注销会完全刷新会话,因此该密钥的存在是经过身份验证的用户.
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")
Run Code Online (Sandbox Code Playgroud)
PS:如果你没有使用数据库会话,aeby会从会话引擎中提取一个很好的.
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |