diff --git a/demo/demo/settings.py b/demo/demo/settings.py index b0b3941..89341b1 100644 --- a/demo/demo/settings.py +++ b/demo/demo/settings.py @@ -44,17 +44,19 @@ INSTALLED_APPS = ( 'django.contrib.staticfiles', 'django.contrib.sites', + 'rest_framework', 'rest_framework.authtoken', 'rest_auth', - 'allauth', - 'allauth.account', - 'rest_auth.registration', + # 'allauth', + # 'allauth.account', + # 'rest_auth.registration', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -105,3 +107,12 @@ SITE_ID = 1 ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_EMAIL_VERIFICATION = 'mandatory' + +CORS_ORIGIN_ALLOW_ALL = True + +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.SessionAuthentication', + 'rest_framework.authentication.TokenAuthentication', + ) +} \ No newline at end of file diff --git a/demo/demo/urls.py b/demo/demo/urls.py index 42b4a88..1eb8778 100644 --- a/demo/demo/urls.py +++ b/demo/demo/urls.py @@ -33,5 +33,6 @@ urlpatterns = patterns('', url(r'^rest-auth/', include('rest_auth.urls')), url(r'^rest-auth/registration/', include('rest_auth.registration.urls')), + url(r'^account/', include('allauth.urls')), url(r'^admin/', include(admin.site.urls)), ) diff --git a/rest_auth/registration/serializers.py b/rest_auth/registration/serializers.py index 7a403a0..6682ba8 100644 --- a/rest_auth/registration/serializers.py +++ b/rest_auth/registration/serializers.py @@ -7,8 +7,9 @@ class SocialLoginSerializer(serializers.Serializer): access_token = serializers.CharField(required=True) - def validate_access_token(self, attrs, source): - access_token = attrs[source] + + def validate(self, attrs): + access_token = attrs['access_token'] view = self.context.get('view') request = self.context.get('request') @@ -38,6 +39,6 @@ class SocialLoginSerializer(serializers.Serializer): if not login.is_existing: login.lookup() login.save(request, connect=True) - self.object = {'user': login.account.user} + attrs['user'] = login.account.user return attrs diff --git a/rest_auth/serializers.py b/rest_auth/serializers.py index 00fc438..d498565 100644 --- a/rest_auth/serializers.py +++ b/rest_auth/serializers.py @@ -58,12 +58,12 @@ class PasswordResetSerializer(serializers.Serializer): password_reset_form_class = PasswordResetForm - def validate_email(self, attrs, source): + def validate_email(self, value): # Create PasswordResetForm with the serializer - self.reset_form = self.password_reset_form_class(data=attrs) + self.reset_form = self.password_reset_form_class(data={'email': value}) if not self.reset_form.is_valid(): raise serializers.ValidationError('Error') - return attrs + return value def save(self): request = self.context.get('request') @@ -103,6 +103,7 @@ class PasswordResetConfirmSerializer(serializers.Serializer): self.user = UserModel._default_manager.get(pk=uid) except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist): self._errors['uid'] = ['Invalid value'] + raise serializers.ValidationError('Invalid UID') self.custom_validation(attrs) @@ -115,6 +116,8 @@ class PasswordResetConfirmSerializer(serializers.Serializer): if not default_token_generator.check_token(self.user, attrs['token']): self._errors['token'] = ['Invalid value'] + return attrs + def save(self): self.set_password_form.save() @@ -138,19 +141,20 @@ class PasswordChangeSerializer(serializers.Serializer): self.request = self.context.get('request') self.user = getattr(self.request, 'user', None) - def validate_old_password(self, attrs, source): + def validate_old_password(self, value): if self.old_password_field_enabled and self.user and \ - not self.user.check_password(attrs.get(source, '')): + not self.user.check_password(value): raise serializers.ValidationError('Invalid password') - return attrs + return value def validate(self, attrs): self.set_password_form = self.set_password_form_class(user=self.user, data=attrs) if not self.set_password_form.is_valid(): - self._errors = self.set_password_form.errors - return None + #self._errors = self.set_password_form.errors + #return None + raise serializers.ValidationError(self.set_password_form.errors) return attrs def save(self): diff --git a/rest_auth/tests.py b/rest_auth/tests.py index 1134940..ebfc704 100644 --- a/rest_auth/tests.py +++ b/rest_auth/tests.py @@ -64,7 +64,7 @@ class BaseAPITestCase(object): is_json = bool( filter(lambda x: 'json' in x, self.response._headers['content-type'])) if is_json and self.response.content: - self.response.json = json.loads(self.response.content) + self.response.json = json.loads(self.response.content.decode()) else: self.response.json = {} if status_code: @@ -176,7 +176,7 @@ class APITestCase1(TestCase, BaseAPITestCase): result['uid'] = int_to_base36(user.pk) else: from django.utils.http import urlsafe_base64_encode - result['uid'] = urlsafe_base64_encode(force_bytes(user.pk)) + result['uid'] = urlsafe_base64_encode(force_bytes(user.pk)).decode() result['token'] = default_token_generator.make_token(user) return result diff --git a/rest_auth/views.py b/rest_auth/views.py index 0f18fd5..05217cf 100644 --- a/rest_auth/views.py +++ b/rest_auth/views.py @@ -31,7 +31,7 @@ class Login(GenericAPIView): response_serializer = TokenSerializer def login(self): - self.user = self.serializer.object['user'] + self.user = self.serializer.validated_data['user'] self.token, created = self.token_model.objects.get_or_create( user=self.user) if getattr(settings, 'REST_SESSION_LOGIN', True): diff --git a/setup.py b/setup.py index 1a4fdfe..b8aef1a 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ setup( zip_safe=False, install_requires=[ 'Django>=1.5.0', - 'djangorestframework>=2.3.13, <3.0', + 'djangorestframework>=3.0', 'six>=1.8.0', ], test_suite='runtests.runtests', diff --git a/test_requirements.pip b/test_requirements.pip index 667775b..b3632bb 100644 --- a/test_requirements.pip +++ b/test_requirements.pip @@ -1,2 +1,2 @@ -django-allauth>=0.18.0 +django-allauth==0.18.0 responses>=0.2.2