Skip to content

Commit

Permalink
[1.7.x] Fixed a KeyError on login with legacy sessions; refs #21649.
Browse files Browse the repository at this point in the history
Thanks Loic for the report.

Backport of 11e30b6 from master
  • Loading branch information
timgraham committed Apr 18, 2014
1 parent edaff9b commit 548acd7
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
2 changes: 1 addition & 1 deletion django/contrib/auth/__init__.py
Expand Up @@ -86,7 +86,7 @@ def login(request, user):
if SESSION_KEY in request.session:
if request.session[SESSION_KEY] != user.pk or (
session_auth_hash and
request.session[HASH_SESSION_KEY] != session_auth_hash):
request.session.get(HASH_SESSION_KEY) != session_auth_hash):
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
Expand Down
16 changes: 16 additions & 0 deletions django/contrib/auth/tests/test_views.py
Expand Up @@ -595,6 +595,22 @@ def test_session_key_flushed_on_login_after_password_change(self):
self.login(password='foobar')
self.assertNotEqual(original_session_key, self.client.session.session_key)

def test_login_session_without_hash_session_key(self):
"""
Session without django.contrib.auth.HASH_SESSION_KEY should login
without an exception.
"""
user = User.objects.get(username='testclient')
engine = import_module(settings.SESSION_ENGINE)
session = engine.SessionStore()
session[SESSION_KEY] = user.id
session.save()
original_session_key = session.session_key
self.client.cookies[settings.SESSION_COOKIE_NAME] = original_session_key

self.login()
self.assertNotEqual(original_session_key, self.client.session.session_key)


@skipIfCustomUser
class LoginURLSettings(AuthViewsTestCase):
Expand Down

0 comments on commit 548acd7

Please sign in to comment.