Skip to content

Commit 5498963

Browse files
authored
Fix creating user token during the registration process when both Token authentication and Session authentication are used simultaneously (#605)
* Fix creating user token when both Token authentication and Session authentication are used simultaneously * Fix APIBasicTests::test_registration_with_session test
1 parent 429a270 commit 5498963

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

dj_rest_auth/registration/views.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ def get_response_data(self, user):
5353
'refresh': self.refresh_token,
5454
}
5555
return api_settings.JWT_SERIALIZER(data, context=self.get_serializer_context()).data
56-
elif api_settings.SESSION_LOGIN:
57-
return None
58-
else:
56+
elif self.token_model:
5957
return api_settings.TOKEN_SERIALIZER(user.auth_token, context=self.get_serializer_context()).data
58+
59+
return None
6060

6161
def create(self, request, *args, **kwargs):
6262
serializer = self.get_serializer(data=request.data)
@@ -82,9 +82,7 @@ def perform_create(self, serializer):
8282
allauth_account_settings.EmailVerificationMethod.MANDATORY:
8383
if api_settings.USE_JWT:
8484
self.access_token, self.refresh_token = jwt_encode(user)
85-
elif not api_settings.SESSION_LOGIN:
86-
# Session authentication isn't active either, so this has to be
87-
# token authentication
85+
elif self.token_model:
8886
api_settings.TOKEN_CREATOR(self.token_model, user, serializer)
8987

9088
complete_signup(

dj_rest_auth/tests/test_api.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -530,12 +530,28 @@ def test_registration_with_jwt(self):
530530
@override_api_settings(SESSION_LOGIN=True)
531531
@override_api_settings(TOKEN_MODEL=None)
532532
def test_registration_with_session(self):
533+
import sys
534+
from importlib import reload
535+
from django.contrib.sessions.middleware import SessionMiddleware
536+
from django.contrib.messages.middleware import MessageMiddleware
537+
reload(sys.modules['dj_rest_auth.models'])
538+
reload(sys.modules['dj_rest_auth.registration.views'])
539+
from dj_rest_auth.registration.views import RegisterView
540+
533541
user_count = get_user_model().objects.all().count()
534542

535543
self.post(self.register_url, data={}, status_code=400)
536544

537-
result = self.post(self.register_url, data=self.REGISTRATION_DATA, status_code=204)
538-
self.assertEqual(result.data, None)
545+
factory = APIRequestFactory()
546+
request = factory.post(self.register_url, self.REGISTRATION_DATA)
547+
548+
for middleware_class in (SessionMiddleware, MessageMiddleware):
549+
middleware = middleware_class(lambda request: None)
550+
middleware.process_request(request)
551+
552+
response = RegisterView.as_view()(request)
553+
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
554+
self.assertEqual(response.data, None)
539555
self.assertEqual(get_user_model().objects.all().count(), user_count + 1)
540556

541557
self._login(status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)