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 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):

View File

@ -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.
"""

View File

@ -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())

View File

@ -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):