From 60bc0d447ec51b606e966871812c1481512ac8aa Mon Sep 17 00:00:00 2001 From: Egor Poderyagin Date: Mon, 8 May 2017 07:42:02 +0300 Subject: [PATCH] add support get user details on login --- docs/configuration.rst | 2 ++ rest_auth/tests/test_api.py | 16 ++++++++++++++++ rest_auth/views.py | 11 ++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 1f5b40f..9cbf198 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -48,6 +48,8 @@ Configuration - **REST_USE_JWT** - Enable JWT Authentication instead of Token/Session based. This is built on top of django-rest-framework-jwt http://getblimp.github.io/django-rest-framework-jwt/, which must also be installed. (default: False) +- **REST_USE_TOKEN** - Set to False if you want get USER_DETAILS_SERIALIZER instead any tokens, that can be useful if you use session auth backend (default: True) + - **OLD_PASSWORD_FIELD_ENABLED** - set it to True if you want to have old password verification on password change enpoint (default: False) - **LOGOUT_ON_PASSWORD_CHANGE** - set to False if you want to keep the current user logged in after a password change diff --git a/rest_auth/tests/test_api.py b/rest_auth/tests/test_api.py index 0356d19..57acd88 100644 --- a/rest_auth/tests/test_api.py +++ b/rest_auth/tests/test_api.py @@ -196,6 +196,22 @@ class APITestCase1(TestCase, BaseAPITestCase): # bring back allauth settings.INSTALLED_APPS.append('allauth') + @override_settings(REST_USE_TOKEN=False) + def test_login_api_return_user_information(self): + get_user_model().objects.create_user( + username=self.USERNAME, password=self.PASS, + ) + + payload = { + 'username': self.USERNAME, + 'password': self.PASS + } + response = self.client.post(self.login_url, payload) + self.assertEqual(response.status_code, 200) + + self.assertEqual(response.json()['username'], self.USERNAME) + self.assertEqual(response.json()['last_name'], "") + def test_password_change(self): login_payload = { "username": self.USERNAME, diff --git a/rest_auth/views.py b/rest_auth/views.py index 0493a76..65c6726 100644 --- a/rest_auth/views.py +++ b/rest_auth/views.py @@ -54,8 +54,10 @@ class LoginView(GenericAPIView): def get_response_serializer(self): if getattr(settings, 'REST_USE_JWT', False): response_serializer = JWTSerializer - else: + elif getattr(settings, 'REST_USE_TOKEN', True): response_serializer = TokenSerializer + else: + response_serializer = UserDetailsSerializer return response_serializer def login(self): @@ -63,7 +65,7 @@ class LoginView(GenericAPIView): if getattr(settings, 'REST_USE_JWT', False): self.token = jwt_encode(self.user) - else: + elif getattr(settings, 'REST_USE_TOKEN', True): self.token = create_token(self.token_model, self.user, self.serializer) @@ -80,9 +82,12 @@ class LoginView(GenericAPIView): } serializer = serializer_class(instance=data, context={'request': self.request}) - else: + elif getattr(settings, 'REST_USE_TOKEN', True): serializer = serializer_class(instance=self.token, context={'request': self.request}) + else: + serializer = serializer_class(instance=self.user, + context={'request': self.request}) return Response(serializer.data, status=status.HTTP_200_OK)