Include user and token details in login/register response

This commit is contained in:
mario 2015-11-19 20:08:27 +01:00
parent d90717e9bd
commit 160e71e3fe
4 changed files with 19 additions and 17 deletions

View File

@ -9,7 +9,7 @@ from allauth.account.views import SignupView, ConfirmEmailView
from allauth.account.utils import complete_signup from allauth.account.utils import complete_signup
from allauth.account import app_settings 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.registration.serializers import SocialLoginSerializer
from rest_auth.views import LoginView from rest_auth.views import LoginView
@ -29,6 +29,7 @@ class RegisterView(APIView, SignupView):
allowed_methods = ('POST', 'OPTIONS', 'HEAD') allowed_methods = ('POST', 'OPTIONS', 'HEAD')
token_model = Token token_model = Token
serializer_class = TokenSerializer serializer_class = TokenSerializer
response_serializer = UserDetailsSerializer
def get(self, *args, **kwargs): def get(self, *args, **kwargs):
return Response({}, status=status.HTTP_405_METHOD_NOT_ALLOWED) return Response({}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
@ -65,9 +66,10 @@ class RegisterView(APIView, SignupView):
return self.get_response_with_errors() return self.get_response_with_errors()
def get_response(self): def get_response(self):
# serializer = self.user_serializer_class(instance=self.user) serializer = self.response_serializer(
serializer = self.serializer_class(instance=self.token, instance=self.user,
context={'request': self.request}) context={'request': self.request}
)
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
def get_response_with_errors(self): def get_response_with_errors(self):

View File

@ -89,18 +89,18 @@ class TokenSerializer(serializers.ModelSerializer):
class UserDetailsSerializer(serializers.ModelSerializer): class UserDetailsSerializer(serializers.ModelSerializer):
""" """
User model w/o password User model w/o password
""" """
token = serializers.ReadOnlyField(source='auth_token.key')
class Meta: class Meta:
model = get_user_model() model = get_user_model()
fields = ('username', 'email', 'first_name', 'last_name') fields = ('username', 'email', 'first_name', 'last_name', 'token',)
read_only_fields = ('email', ) read_only_fields = ('email', )
class PasswordResetSerializer(serializers.Serializer): class PasswordResetSerializer(serializers.Serializer):
""" """
Serializer for requesting a password reset e-mail. Serializer for requesting a password reset e-mail.
""" """

View File

@ -184,8 +184,8 @@ class APITestCase1(TestCase, BaseAPITestCase):
user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS)
self.post(self.login_url, data=payload, status_code=200) self.post(self.login_url, data=payload, status_code=200)
self.assertEqual('key' in self.response.json.keys(), True) self.assertEqual('token' in self.response.json.keys(), True)
self.token = self.response.json['key'] self.token = self.response.json['token']
self.post(self.password_change_url, status_code=400) 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) get_user_model().objects.create_user(self.USERNAME, '', self.PASS)
self.post(self.login_url, data=login_payload, status_code=200) 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_password_payload = {
"new_password1": "new_person", "new_password1": "new_person",
@ -252,7 +252,7 @@ class APITestCase1(TestCase, BaseAPITestCase):
} }
get_user_model().objects.create_user(self.USERNAME, '', self.PASS) get_user_model().objects.create_user(self.USERNAME, '', self.PASS)
self.post(self.login_url, data=login_payload, status_code=200) 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_password_payload = {
"old_password": "%s!" % self.PASS, # wrong password "old_password": "%s!" % self.PASS, # wrong password
@ -345,7 +345,7 @@ class APITestCase1(TestCase, BaseAPITestCase):
"password": self.PASS "password": self.PASS
} }
self.post(self.login_url, data=payload, status_code=200) 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.get(self.user_url, status_code=200)
self.patch(self.user_url, data=self.BASIC_USER_DATA, 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.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) self.assertEqual(get_user_model().objects.all().count(), users_count + 1)
# make sure that second request will not create a new user # make sure that second request will not create a new user
self.post(self.fb_login_url, data=payload, status_code=200) 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) self.assertEqual(get_user_model().objects.all().count(), users_count + 1)
@responses.activate @responses.activate
@ -531,4 +531,4 @@ class TestSocialAuth(TestCase, BaseAPITestCase):
} }
self.post(self.fb_login_url, data=payload, status_code=200) 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())

View File

@ -30,7 +30,7 @@ class LoginView(GenericAPIView):
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
serializer_class = LoginSerializer serializer_class = LoginSerializer
token_model = Token token_model = Token
response_serializer = TokenSerializer response_serializer = UserDetailsSerializer
def login(self): def login(self):
self.user = self.serializer.validated_data['user'] self.user = self.serializer.validated_data['user']
@ -41,7 +41,7 @@ class LoginView(GenericAPIView):
def get_response(self): def get_response(self):
return Response( 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): def get_error_response(self):