diff --git a/rest_auth/registration/serializers.py b/rest_auth/registration/serializers.py index c6b5d5b..ce32c38 100644 --- a/rest_auth/registration/serializers.py +++ b/rest_auth/registration/serializers.py @@ -127,6 +127,8 @@ class RegisterSerializer(serializers.Serializer): email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED) password1 = serializers.CharField(write_only=True) password2 = serializers.CharField(write_only=True) + first_name = serializers.CharField(required=settings.ACCOUNT_FIRST_NAME_REQUIRED, max_length=30) + last_name = serializers.CharField(required=settings.ACCOUNT_LAST_NAME_REQUIRED, max_length=30) def validate_username(self, username): username = get_adapter().clean_username(username) @@ -153,10 +155,12 @@ class RegisterSerializer(serializers.Serializer): def get_cleaned_data(self): return { - 'username': self.validated_data.get('username', ''), - 'password1': self.validated_data.get('password1', ''), - 'email': self.validated_data.get('email', '') - } + 'username': self.validated_data.get('username', ''), + 'password1': self.validated_data.get('password1', ''), + 'email': self.validated_data.get('email', ''), + 'first_name': self.validated_data.get('first_name', ''), + 'last_name': self.validated_data.get('last_name', ''), + } def save(self, request): adapter = get_adapter() diff --git a/rest_auth/serializers.py b/rest_auth/serializers.py index c5dad7d..22c821b 100644 --- a/rest_auth/serializers.py +++ b/rest_auth/serializers.py @@ -25,7 +25,12 @@ class LoginSerializer(serializers.Serializer): user = None if email and password: - user = authenticate(email=email, password=password) + try: + username = UserModel.objects.get(email__iexact=email).get_username() + user = authenticate(username=username, password=password) + except UserModel.DoesNotExist: + msg = _('Unable to log in with provided credentials.') + raise exceptions.ValidationError(msg) else: msg = _('Must include "email" and "password".') raise exceptions.ValidationError(msg) @@ -47,7 +52,12 @@ class LoginSerializer(serializers.Serializer): user = None if email and password: - user = authenticate(email=email, password=password) + try: + username = UserModel.objects.get(email__iexact=email).get_username() + user = authenticate(username=username, password=password) + except UserModel.DoesNotExist: + msg = _('Unable to log in with provided credentials.') + raise exceptions.ValidationError(msg) elif username and password: user = authenticate(username=username, password=password) else: @@ -71,7 +81,7 @@ class LoginSerializer(serializers.Serializer): user = self._validate_email(email, password) # Authentication through username - if app_settings.AUTHENTICATION_METHOD == app_settings.AuthenticationMethod.USERNAME: + elif app_settings.AUTHENTICATION_METHOD == app_settings.AuthenticationMethod.USERNAME: user = self._validate_username(username, password) # Authentication through either username or email diff --git a/rest_auth/urls.py b/rest_auth/urls.py index 7a35e9b..66fdb69 100644 --- a/rest_auth/urls.py +++ b/rest_auth/urls.py @@ -5,7 +5,17 @@ from rest_auth.views import ( PasswordResetView, PasswordResetConfirmView ) +from rest_framework import status +from rest_framework.decorators import api_view +from rest_framework.response import Response + +@api_view() +def null_view(request): + return Response(status=status.HTTP_400_BAD_REQUEST) + urlpatterns = [ + url(r'^password-reset-confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', null_view ,name='password_reset_confirm'), + url(r"^confirm-email/$", null_view, name="account_email_verification_sent"), # URLs that do not require a session or valid token url(r'^password/reset/$', PasswordResetView.as_view(), name='rest_password_reset'),