This commit is contained in:
Cristian Salamea 2015-01-08 19:57:33 +00:00
commit e3168f5ce8
8 changed files with 36 additions and 19 deletions

View File

@ -44,17 +44,19 @@ INSTALLED_APPS = (
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sites', 'django.contrib.sites',
'rest_framework', 'rest_framework',
'rest_framework.authtoken', 'rest_framework.authtoken',
'rest_auth', 'rest_auth',
'allauth', # 'allauth',
'allauth.account', # 'allauth.account',
'rest_auth.registration', # 'rest_auth.registration',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
@ -105,3 +107,12 @@ SITE_ID = 1
ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
CORS_ORIGIN_ALLOW_ALL = True
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}

View File

@ -33,5 +33,6 @@ urlpatterns = patterns('',
url(r'^rest-auth/', include('rest_auth.urls')), url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')), url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^account/', include('allauth.urls')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
) )

View File

@ -7,8 +7,9 @@ class SocialLoginSerializer(serializers.Serializer):
access_token = serializers.CharField(required=True) 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') view = self.context.get('view')
request = self.context.get('request') request = self.context.get('request')
@ -38,6 +39,6 @@ class SocialLoginSerializer(serializers.Serializer):
if not login.is_existing: if not login.is_existing:
login.lookup() login.lookup()
login.save(request, connect=True) login.save(request, connect=True)
self.object = {'user': login.account.user} attrs['user'] = login.account.user
return attrs return attrs

View File

@ -58,12 +58,12 @@ class PasswordResetSerializer(serializers.Serializer):
password_reset_form_class = PasswordResetForm password_reset_form_class = PasswordResetForm
def validate_email(self, attrs, source): def validate_email(self, value):
# Create PasswordResetForm with the serializer # 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(): if not self.reset_form.is_valid():
raise serializers.ValidationError('Error') raise serializers.ValidationError('Error')
return attrs return value
def save(self): def save(self):
request = self.context.get('request') request = self.context.get('request')
@ -103,6 +103,7 @@ class PasswordResetConfirmSerializer(serializers.Serializer):
self.user = UserModel._default_manager.get(pk=uid) self.user = UserModel._default_manager.get(pk=uid)
except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist): except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
self._errors['uid'] = ['Invalid value'] self._errors['uid'] = ['Invalid value']
raise serializers.ValidationError('Invalid UID')
self.custom_validation(attrs) self.custom_validation(attrs)
@ -115,6 +116,8 @@ class PasswordResetConfirmSerializer(serializers.Serializer):
if not default_token_generator.check_token(self.user, attrs['token']): if not default_token_generator.check_token(self.user, attrs['token']):
self._errors['token'] = ['Invalid value'] self._errors['token'] = ['Invalid value']
return attrs
def save(self): def save(self):
self.set_password_form.save() self.set_password_form.save()
@ -138,19 +141,20 @@ class PasswordChangeSerializer(serializers.Serializer):
self.request = self.context.get('request') self.request = self.context.get('request')
self.user = getattr(self.request, 'user', None) 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 \ 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') raise serializers.ValidationError('Invalid password')
return attrs return value
def validate(self, attrs): def validate(self, attrs):
self.set_password_form = self.set_password_form_class(user=self.user, self.set_password_form = self.set_password_form_class(user=self.user,
data=attrs) data=attrs)
if not self.set_password_form.is_valid(): if not self.set_password_form.is_valid():
self._errors = self.set_password_form.errors #self._errors = self.set_password_form.errors
return None #return None
raise serializers.ValidationError(self.set_password_form.errors)
return attrs return attrs
def save(self): def save(self):

View File

@ -64,7 +64,7 @@ class BaseAPITestCase(object):
is_json = bool( is_json = bool(
filter(lambda x: 'json' in x, self.response._headers['content-type'])) filter(lambda x: 'json' in x, self.response._headers['content-type']))
if is_json and self.response.content: 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: else:
self.response.json = {} self.response.json = {}
if status_code: if status_code:
@ -176,7 +176,7 @@ class APITestCase1(TestCase, BaseAPITestCase):
result['uid'] = int_to_base36(user.pk) result['uid'] = int_to_base36(user.pk)
else: else:
from django.utils.http import urlsafe_base64_encode 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) result['token'] = default_token_generator.make_token(user)
return result return result

View File

@ -31,7 +31,7 @@ class Login(GenericAPIView):
response_serializer = TokenSerializer response_serializer = TokenSerializer
def login(self): 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( self.token, created = self.token_model.objects.get_or_create(
user=self.user) user=self.user)
if getattr(settings, 'REST_SESSION_LOGIN', True): if getattr(settings, 'REST_SESSION_LOGIN', True):

View File

@ -29,7 +29,7 @@ setup(
zip_safe=False, zip_safe=False,
install_requires=[ install_requires=[
'Django>=1.5.0', 'Django>=1.5.0',
'djangorestframework>=2.3.13, <3.0', 'djangorestframework>=3.0',
'six>=1.8.0', 'six>=1.8.0',
], ],
test_suite='runtests.runtests', test_suite='runtests.runtests',

View File

@ -1,2 +1,2 @@
django-allauth>=0.18.0 django-allauth==0.18.0
responses>=0.2.2 responses>=0.2.2