Skip to content

Commit 78312d4

Browse files
committed
Client.logout() also clears any force_authenticate
1 parent 903fb5f commit 78312d4

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

rest_framework/test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ def options(self, path, data=None, format=None, content_type=None,
204204

205205
def logout(self):
206206
self._credentials = {}
207+
208+
# Also clear any `force_authenticate`
209+
self.handler._force_user = None
210+
self.handler._force_token = None
211+
207212
return super(APIClient, self).logout()
208213

209214

tests/test_testing.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def test_explicitly_enforce_csrf_checks(self):
109109

110110
def test_can_logout(self):
111111
"""
112-
`logout()` reset stored credentials
112+
`logout()` resets stored credentials
113113
"""
114114
self.client.credentials(HTTP_AUTHORIZATION='example')
115115
response = self.client.get('/view/')
@@ -118,6 +118,18 @@ def test_can_logout(self):
118118
response = self.client.get('/view/')
119119
self.assertEqual(response.data['auth'], b'')
120120

121+
def test_logout_resets_force_authenticate(self):
122+
"""
123+
`logout()` resets any `force_authenticate`
124+
"""
125+
user = User.objects.create_user('example', '[email protected]', 'password')
126+
self.client.force_authenticate(user)
127+
response = self.client.get('/view/')
128+
self.assertEqual(response.data['user'], 'example')
129+
self.client.logout()
130+
response = self.client.get('/view/')
131+
self.assertEqual(response.data['user'], b'')
132+
121133
def test_follow_redirect(self):
122134
"""
123135
Follow redirect by setting follow argument.

0 commit comments

Comments
 (0)