Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2011 17:50:23

zayass
От:
Зарегистрирован: 2011-04-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Смена сессии при авторизации

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
Работает вроде правильно, но как-то это некрасиво.



Офлайн

#2 Апрель 5, 2011 19:59:54

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Смена сессии при авторизации

Может просто в куках хранить независимо от сессии идентификатор корзины?



Офлайн

#3 Апрель 6, 2011 01:49:53

zayass
От:
Зарегистрирован: 2011-04-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Смена сессии при авторизации

ну так мне как-то больше нравится: устаревшие корзины удаляются вместе с сессиями, для авторизованных пользователей создается независимая от сессии корзина. и к тому же хранить id прямо в куках как-то небезопасно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version