【问题标题】:Manually validate a django session id is currently authenticated手动验证 django 会话 ID 当前已通过身份验证
【发布时间】:2011-06-29 04:40:26
【问题描述】:

我需要一个函数告诉我 Django session-id 当前是否经过身份验证。我知道这已经内置在 Django 中,而且我可以正常工作。

但是我有一个外部应用程序传递了一个会话 ID,当它把会话 ID 字符串传递回 Django 时,我需要验证这个会话 ID 是否有效并且当前已通过身份验证。

从哪里开始重用 Django 1.2 的一些内置函数?

【问题讨论】:

    标签: python django django-authentication django-sessions django-users


    【解决方案1】:

    您可以这样做(未经测试,但它向您展示了一种可能的方法):

    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"
    

    【讨论】:

    • 'YOUR_SESSION_KEY' 在 try/except 块之前使用,所以如果 YOUR_SESSION_KEY 不存在,这不会完全失败吗?
    【解决方案2】:

    这是源代码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 的缓存,这是行不通的。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2020-09-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2014-01-08
    相关资源
    最近更新 更多