From a75d5e06b6159d2956dda44030c7dcb04fbccbb5 Mon Sep 17 00:00:00 2001 From: imperosol Date: Wed, 24 Jun 2026 22:21:47 +0200 Subject: [PATCH] fix: session not properly updated on counter login Fixes #1440 --- counter/tests/test_counter.py | 22 ++++++++++++++++++++++ counter/views/home.py | 1 + 2 files changed, 23 insertions(+) diff --git a/counter/tests/test_counter.py b/counter/tests/test_counter.py index 1fea78a7..deba1f1f 100644 --- a/counter/tests/test_counter.py +++ b/counter/tests/test_counter.py @@ -886,6 +886,28 @@ class TestBarmanConnection(TestCase): ) assert response.status_code == 403 + def test_logout_then_login(self): + """Test that the login is successful if it is after a previous logout. + + This is a regression test for #1440 + """ + self.client.post( # login + self.login_url, {"username": self.barman.username, "password": "plop"} + ) + self.client.post( # logout + reverse("counter:logout", kwargs={"counter_id": self.counter.id}), + data={"user_id": self.barman.id}, + ) + response = self.client.post( # and re-login + self.login_url, {"username": self.barman.username, "password": "plop"} + ) + assert response.status_code == 200 + assert response.headers["HX-Redirect"] == self.detail_url + response = self.client.get( + self.detail_url, {"username": self.barman.username, "password": "plop"} + ) + assert self.barman in response.wsgi_request.barmen + @pytest.mark.django_db def test_barman_timeout(client: Client): diff --git a/counter/views/home.py b/counter/views/home.py index 47196503..1ee8c847 100644 --- a/counter/views/home.py +++ b/counter/views/home.py @@ -61,6 +61,7 @@ class CounterLoginFragment(FragmentMixin, SingleObjectMixin, FormView): user = form.get_user() perm = self.object.permanencies.create(user=user, start=timezone.now()) self.request.session.setdefault(SESSION_PERMANENCES_KEY, []).append(perm.id) + self.request.session.modified = True self.success_url = reverse( "counter:details", kwargs={"counter_id": self.object.id} )