mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-07-04 11:13:04 +03:00
Merge bd7d3f0a1e
into cdd04aa9be
This commit is contained in:
commit
08ca89544a
|
@ -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_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 **just** 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)
|
- **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
|
- **LOGOUT_ON_PASSWORD_CHANGE** - set to False if you want to keep the current user logged in after a password change
|
||||||
|
|
|
@ -19,7 +19,8 @@ from allauth.socialaccount import signals
|
||||||
from allauth.socialaccount.adapter import get_adapter as get_social_adapter
|
from allauth.socialaccount.adapter import get_adapter as get_social_adapter
|
||||||
from allauth.socialaccount.models import SocialAccount
|
from allauth.socialaccount.models import SocialAccount
|
||||||
|
|
||||||
from rest_auth.app_settings import (TokenSerializer,
|
from rest_auth.app_settings import (UserDetailsSerializer,
|
||||||
|
TokenSerializer,
|
||||||
JWTSerializer,
|
JWTSerializer,
|
||||||
create_token)
|
create_token)
|
||||||
from rest_auth.models import TokenModel
|
from rest_auth.models import TokenModel
|
||||||
|
@ -56,8 +57,9 @@ class RegisterView(CreateAPIView):
|
||||||
'token': self.token
|
'token': self.token
|
||||||
}
|
}
|
||||||
return JWTSerializer(data).data
|
return JWTSerializer(data).data
|
||||||
else:
|
elif getattr(settings, 'REST_USE_TOKEN', True):
|
||||||
return TokenSerializer(user.auth_token).data
|
return TokenSerializer(user.auth_token).data
|
||||||
|
return UserDetailsSerializer(user).data
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
serializer = self.get_serializer(data=request.data)
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
@ -73,12 +75,13 @@ class RegisterView(CreateAPIView):
|
||||||
user = serializer.save(self.request)
|
user = serializer.save(self.request)
|
||||||
if getattr(settings, 'REST_USE_JWT', False):
|
if getattr(settings, 'REST_USE_JWT', False):
|
||||||
self.token = jwt_encode(user)
|
self.token = jwt_encode(user)
|
||||||
else:
|
elif getattr(settings, 'REST_USE_TOKEN', True):
|
||||||
create_token(self.token_model, user, serializer)
|
create_token(self.token_model, user, serializer)
|
||||||
|
|
||||||
complete_signup(self.request._request, user,
|
complete_signup(self.request._request, user,
|
||||||
allauth_settings.EMAIL_VERIFICATION,
|
allauth_settings.EMAIL_VERIFICATION,
|
||||||
None)
|
None)
|
||||||
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,21 @@ class APIBasicTests(TestsMixin, TestCase):
|
||||||
# bring back allauth
|
# bring back allauth
|
||||||
settings.INSTALLED_APPS.append('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
|
||||||
|
}
|
||||||
|
self.post(self.login_url, data=payload, status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(self.response.json['username'], self.USERNAME)
|
||||||
|
self.assertEqual(self.response.json['last_name'], "")
|
||||||
|
|
||||||
def test_password_change(self):
|
def test_password_change(self):
|
||||||
login_payload = {
|
login_payload = {
|
||||||
"username": self.USERNAME,
|
"username": self.USERNAME,
|
||||||
|
@ -434,6 +449,18 @@ class APIBasicTests(TestsMixin, TestCase):
|
||||||
self._login()
|
self._login()
|
||||||
self._logout()
|
self._logout()
|
||||||
|
|
||||||
|
@override_settings(REST_USE_TOKEN=False)
|
||||||
|
def test_registration_without_token(self):
|
||||||
|
user_count = get_user_model().objects.all().count()
|
||||||
|
|
||||||
|
self.post(self.register_url, data=self.REGISTRATION_DATA_WITH_EMAIL, status_code=201)
|
||||||
|
self.assertEqual(self.response.json['username'], self.USERNAME)
|
||||||
|
self.assertEqual(self.response.json['email'], self.EMAIL)
|
||||||
|
|
||||||
|
self.assertEqual(get_user_model().objects.all().count(), user_count + 1)
|
||||||
|
self._login()
|
||||||
|
self._logout()
|
||||||
|
|
||||||
def test_registration_with_invalid_password(self):
|
def test_registration_with_invalid_password(self):
|
||||||
data = self.REGISTRATION_DATA.copy()
|
data = self.REGISTRATION_DATA.copy()
|
||||||
data['password2'] = 'foobar'
|
data['password2'] = 'foobar'
|
||||||
|
|
|
@ -54,8 +54,10 @@ class LoginView(GenericAPIView):
|
||||||
def get_response_serializer(self):
|
def get_response_serializer(self):
|
||||||
if getattr(settings, 'REST_USE_JWT', False):
|
if getattr(settings, 'REST_USE_JWT', False):
|
||||||
response_serializer = JWTSerializer
|
response_serializer = JWTSerializer
|
||||||
else:
|
elif getattr(settings, 'REST_USE_TOKEN', True):
|
||||||
response_serializer = TokenSerializer
|
response_serializer = TokenSerializer
|
||||||
|
else:
|
||||||
|
response_serializer = UserDetailsSerializer
|
||||||
return response_serializer
|
return response_serializer
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
|
@ -63,7 +65,7 @@ class LoginView(GenericAPIView):
|
||||||
|
|
||||||
if getattr(settings, 'REST_USE_JWT', False):
|
if getattr(settings, 'REST_USE_JWT', False):
|
||||||
self.token = jwt_encode(self.user)
|
self.token = jwt_encode(self.user)
|
||||||
else:
|
elif getattr(settings, 'REST_USE_TOKEN', True):
|
||||||
self.token = create_token(self.token_model, self.user,
|
self.token = create_token(self.token_model, self.user,
|
||||||
self.serializer)
|
self.serializer)
|
||||||
|
|
||||||
|
@ -80,9 +82,12 @@ class LoginView(GenericAPIView):
|
||||||
}
|
}
|
||||||
serializer = serializer_class(instance=data,
|
serializer = serializer_class(instance=data,
|
||||||
context={'request': self.request})
|
context={'request': self.request})
|
||||||
else:
|
elif getattr(settings, 'REST_USE_TOKEN', True):
|
||||||
serializer = serializer_class(instance=self.token,
|
serializer = serializer_class(instance=self.token,
|
||||||
context={'request': self.request})
|
context={'request': self.request})
|
||||||
|
else:
|
||||||
|
serializer = serializer_class(instance=self.user,
|
||||||
|
context={'request': self.request})
|
||||||
|
|
||||||
response = Response(serializer.data, status=status.HTTP_200_OK)
|
response = Response(serializer.data, status=status.HTTP_200_OK)
|
||||||
if getattr(settings, 'REST_USE_JWT', False):
|
if getattr(settings, 'REST_USE_JWT', False):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user