7

Make the static elements tracked users only

We cannot track anonymous users as the session expires after 10 minutes of
inactivity. This also avoids an issue where there is an error when the user's
session has expired and they navigate a page
This commit is contained in:
Todd Dembrey
2017-11-01 16:43:22 +00:00
parent b8bf27fb99
commit 1f4a4536ab
6 changed files with 86 additions and 40 deletions

View File

@ -26,7 +26,7 @@ def user_from_data(user_id):
try:
return User.objects.get(id=user_id)
except User.DoesNotExist:
return AnonymousUser
return AnonymousUser()
@ -78,22 +78,23 @@ class SegmentAdminForm(WagtailAdminModelForm):
request.session = SessionStore()
adapter = get_segment_adapter(request)
sessions_to_add = []
sessions = Session.objects.filter(expire_date__gt=timezone.now()).iterator()
users_to_add = []
sessions = Session.objects.iterator()
take_session = takewhile(
lambda x: instance.count == 0 or len(sessions_to_add) <= instance.count,
lambda x: instance.count == 0 or len(users_to_add) <= instance.count,
sessions
)
for session in take_session:
session_data = session.get_decoded()
user = user_from_data(session_data.get('_auth_id'))
request.user = user
request.session = SessionStore(session_key=session.session_key)
passes = adapter._test_rules(instance.get_rules(), request, instance.match_any)
if passes:
sessions_to_add.append(session)
user = user_from_data(session_data.get('_auth_user_id'))
if user.is_authenticated:
request.user = user
request.session = SessionStore(session_key=session.session_key)
passes = adapter._test_rules(instance.get_rules(), request, instance.match_any)
if passes:
users_to_add.append(user)
instance.sessions.add(*sessions_to_add)
instance.static_users.add(*users_to_add)
return instance