From 160e71e3fed12f410a2b2944af3c4a5526ea8b38 Mon Sep 17 00:00:00 2001 From: mario Date: Thu, 19 Nov 2015 20:08:27 +0100 Subject: [PATCH] Include user and token details in login/register response --- rest_auth/registration/views.py | 10 ++++++---- rest_auth/serializers.py | 6 +++--- rest_auth/tests.py | 16 ++++++++-------- rest_auth/views.py | 4 ++-- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/rest_auth/registration/views.py b/rest_auth/registration/views.py index e700706..38988c9 100644 --- a/rest_auth/registration/views.py +++ b/rest_auth/registration/views.py @@ -9,7 +9,7 @@ from allauth.account.views import SignupView, ConfirmEmailView from allauth.account.utils import complete_signup from allauth.account import app_settings -from rest_auth.app_settings import TokenSerializer +from rest_auth.app_settings import TokenSerializer, UserDetailsSerializer from rest_auth.registration.serializers import SocialLoginSerializer from rest_auth.views import LoginView @@ -29,6 +29,7 @@ class RegisterView(APIView, SignupView): allowed_methods = ('POST', 'OPTIONS', 'HEAD') token_model = Token serializer_class = TokenSerializer + response_serializer = UserDetailsSerializer def get(self, *args, **kwargs): return Response({}, status=status.HTTP_405_METHOD_NOT_ALLOWED) @@ -65,9 +66,10 @@ class RegisterView(APIView, SignupView): return self.get_response_with_errors() def get_response(self): - # serializer = self.user_serializer_class(instance=self.user) - serializer = self.serializer_class(instance=self.token, - context={'request': self.request}) + serializer = self.response_serializer( + instance=self.user, + context={'request': self.request} + ) return Response(serializer.data, status=status.HTTP_201_CREATED) def get_response_with_errors(self): diff --git a/rest_auth/serializers.py b/rest_auth/serializers.py index 998e33d..c7edfe6 100644 --- a/rest_auth/serializers.py +++ b/rest_auth/serializers.py @@ -89,18 +89,18 @@ class TokenSerializer(serializers.ModelSerializer): class UserDetailsSerializer(serializers.ModelSerializer): - """ User model w/o password """ + token = serializers.ReadOnlyField(source='auth_token.key') + class Meta: model = get_user_model() - fields = ('username', 'email', 'first_name', 'last_name') + fields = ('username', 'email', 'first_name', 'last_name', 'token',) read_only_fields = ('email', ) class PasswordResetSerializer(serializers.Serializer): - """ Serializer for requesting a password reset e-mail. """ diff --git a/rest_auth/tests.py b/rest_auth/tests.py index ae8bd18..3a0ade0 100644 --- a/rest_auth/tests.py +++ b/rest_auth/tests.py @@ -184,8 +184,8 @@ class APITestCase1(TestCase, BaseAPITestCase): user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=payload, status_code=200) - self.assertEqual('key' in self.response.json.keys(), True) - self.token = self.response.json['key'] + self.assertEqual('token' in self.response.json.keys(), True) + self.token = self.response.json['token'] self.post(self.password_change_url, status_code=400) @@ -211,7 +211,7 @@ class APITestCase1(TestCase, BaseAPITestCase): } get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=login_payload, status_code=200) - self.token = self.response.json['key'] + self.token = self.response.json['token'] new_password_payload = { "new_password1": "new_person", @@ -252,7 +252,7 @@ class APITestCase1(TestCase, BaseAPITestCase): } get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=login_payload, status_code=200) - self.token = self.response.json['key'] + self.token = self.response.json['token'] new_password_payload = { "old_password": "%s!" % self.PASS, # wrong password @@ -345,7 +345,7 @@ class APITestCase1(TestCase, BaseAPITestCase): "password": self.PASS } self.post(self.login_url, data=payload, status_code=200) - self.token = self.response.json['key'] + self.token = self.response.json['token'] self.get(self.user_url, status_code=200) self.patch(self.user_url, data=self.BASIC_USER_DATA, status_code=200) @@ -479,12 +479,12 @@ class TestSocialAuth(TestCase, BaseAPITestCase): } self.post(self.fb_login_url, data=payload, status_code=200) - self.assertIn('key', self.response.json.keys()) + self.assertIn('token', self.response.json.keys()) self.assertEqual(get_user_model().objects.all().count(), users_count + 1) # make sure that second request will not create a new user self.post(self.fb_login_url, data=payload, status_code=200) - self.assertIn('key', self.response.json.keys()) + self.assertIn('token', self.response.json.keys()) self.assertEqual(get_user_model().objects.all().count(), users_count + 1) @responses.activate @@ -531,4 +531,4 @@ class TestSocialAuth(TestCase, BaseAPITestCase): } self.post(self.fb_login_url, data=payload, status_code=200) - self.assertIn('key', self.response.json.keys()) + self.assertIn('token', self.response.json.keys()) diff --git a/rest_auth/views.py b/rest_auth/views.py index d789ac4..6a992db 100644 --- a/rest_auth/views.py +++ b/rest_auth/views.py @@ -30,7 +30,7 @@ class LoginView(GenericAPIView): permission_classes = (AllowAny,) serializer_class = LoginSerializer token_model = Token - response_serializer = TokenSerializer + response_serializer = UserDetailsSerializer def login(self): self.user = self.serializer.validated_data['user'] @@ -41,7 +41,7 @@ class LoginView(GenericAPIView): def get_response(self): return Response( - self.response_serializer(self.token).data, status=status.HTTP_200_OK + self.response_serializer(self.user).data, status=status.HTTP_200_OK ) def get_error_response(self):