Вручную проверить идентификатор сессии Django в настоящее время аутентифицирована - PullRequest
4 голосов
/ 17 февраля 2011

Мне нужно, чтобы функция сообщала мне, аутентифицирован ли идентификатор сеанса django в настоящее время или нет. Я понимаю, что это уже встроено в Django, и у меня это работает просто отлично.

Но у меня есть внешнее приложение, которое получает идентификатор сеанса, и когда он передает строку идентификатора сеанса обратно в django, мне нужно проверить, что этот идентификатор сеанса является действительным и в настоящее время аутентифицирован.

С чего начать для повторного использования некоторых встроенных функций django 1.2?

Спасибо

Ответы [ 2 ]

7 голосов
/ 17 февраля 2011

Вы можете сделать это так (не проверено, но показывает возможный путь):

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"
5 голосов
/ 17 февраля 2011

Вот строка в источнике 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 вытащил из движка сессий, если вы не используете сеансы БД.

...