手动验证 django 会话 ID 当前是否已通过身份验证

发布于 2024-10-18 06:39:24 字数 195 浏览 3 评论 0原文

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

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

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

I need to have a function tell me if a Django session-id is currently authenticated or not. I understand this is already built into Django and I have that working just fine.

But I have an external app that gets passed a session id, and when it passes the session-id string back to Django I need to validate that this session id is valid and currently authenticated.

Where do I start reusing some of the built-in functions Django 1.2 has?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仅此而已 2024-10-25 06:39:24

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

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"

You can do it like this (not tested, but it shows you a possible way):

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"
闻呓 2024-10-25 06:39:24

下面是源代码 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 提供的一个很好的方法可以从会话引擎中提取。

Here's a line in the source django.contrib.auth.__init__.login that logs in a user.

    request.session[SESSION_KEY] = user.id

Logging out flushes the session completely, therefore the presence of that key is the authenticated user.

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: nice one by aeby to pull from session engine if you're not using db sessions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文