Найти - Пользователи
Полная версия: Смена сессии при авторизации
Начало » Django » Смена сессии при авторизации
1
zayass
django.contrib.auth.login()/logout() удаляют текущую сессию и создают новую. А в месте с сессией удаляется и корзина. Подскажите, пожалуйста, как лучше изменить поведение этого модуля.

Я пока просто изменил эти функции в /usr/share/pyshared/django/contrib/auth/__init__.py. Вот так:

def login(request, user):
"""
Persist a user id and a backend in the request. This way a user doesn't
have to reauthenticate on every request.
"""
if user is None:
user = request.user
# TODO: It would be nice to support different login methods, like signed cookies.
user.last_login = datetime.datetime.now()
user.save()

if SESSION_KEY in request.session:
if request.session[SESSION_KEY] != user.id:
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
request.session.clear() #request.session.flush()
else:
pass #request.session.cycle_key()
request.session[SESSION_KEY] = user.id
request.session[BACKEND_SESSION_KEY] = user.backend
if hasattr(request, 'user'):
request.user = user

def logout(request):
"""
Removes the authenticated user's ID from the request and flushes their
session data.
"""
request.session.clear() #request.session.flush()
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()

def get_user(request):
from django.contrib.auth.models import AnonymousUser
try:
user_id = request.session[SESSION_KEY]
backend_path = request.session[BACKEND_SESSION_KEY]
backend = load_backend(backend_path)
user = backend.get_user(user_id) or AnonymousUser()
except KeyError:
user = AnonymousUser()
return user
Работает вроде правильно, но как-то это некрасиво.
fth
Может просто в куках хранить независимо от сессии идентификатор корзины?
zayass
ну так мне как-то больше нравится: устаревшие корзины удаляются вместе с сессиями, для авторизованных пользователей создается независимая от сессии корзина. и к тому же хранить id прямо в куках как-то небезопасно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB