mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-02-06 21:20:32 +03:00
Cleaned up LoginSerializer codebase
This commit is contained in:
parent
b12ed79bb1
commit
54eb54ad65
|
@ -7,6 +7,7 @@ Basic
|
|||
- /rest-auth/login/ (POST)
|
||||
|
||||
- username (string)
|
||||
- email (string)
|
||||
- password (string)
|
||||
|
||||
|
||||
|
|
|
@ -19,50 +19,73 @@ class LoginSerializer(serializers.Serializer):
|
|||
email = serializers.EmailField(required=False, allow_blank=True)
|
||||
password = serializers.CharField(style={'input_type': 'password'})
|
||||
|
||||
def _validate_email(self, email, password):
|
||||
user = None
|
||||
|
||||
if email and password:
|
||||
user = authenticate(email=email, password=password)
|
||||
else:
|
||||
msg = _('Must include "email" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
|
||||
return user
|
||||
|
||||
def _validate_username(self, username, password):
|
||||
user = None
|
||||
|
||||
if username and password:
|
||||
user = authenticate(username=username, password=password)
|
||||
else:
|
||||
msg = _('Must include "username" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
|
||||
return user
|
||||
|
||||
def _validate_username_email(self, username, email, password):
|
||||
user = None
|
||||
|
||||
if email and password:
|
||||
user = authenticate(email=email, password=password)
|
||||
elif username and password:
|
||||
user = authenticate(username=username, password=password)
|
||||
else:
|
||||
msg = _('Must include either "username" or "email" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
|
||||
return user
|
||||
|
||||
def validate(self, attrs):
|
||||
username = attrs.get('username')
|
||||
email = attrs.get('email')
|
||||
password = attrs.get('password')
|
||||
|
||||
user = None
|
||||
|
||||
if 'allauth' in settings.INSTALLED_APPS:
|
||||
from allauth.account import app_settings
|
||||
|
||||
# Authentication through email
|
||||
if app_settings.AUTHENTICATION_METHOD == app_settings.AuthenticationMethod.EMAIL:
|
||||
if email and password:
|
||||
user = authenticate(email=email, password=password)
|
||||
else:
|
||||
msg = _('Must include "email" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
user = self._validate_email(email, password)
|
||||
|
||||
# Authentication through username
|
||||
elif app_settings.AUTHENTICATION_METHOD == app_settings.AuthenticationMethod.USERNAME:
|
||||
if username and password:
|
||||
user = authenticate(username=username, password=password)
|
||||
else:
|
||||
msg = _('Must include "username" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
if app_settings.AUTHENTICATION_METHOD == app_settings.AuthenticationMethod.USERNAME:
|
||||
user = self._validate_username(username, password)
|
||||
|
||||
# Authentication through either username or email
|
||||
else:
|
||||
if email and password:
|
||||
user = authenticate(email=email, password=password)
|
||||
elif username and password:
|
||||
user = authenticate(username=username, password=password)
|
||||
else:
|
||||
msg = _('Must include either "username" or "email" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
user = self._validate_username_email(username, email, password)
|
||||
|
||||
elif username or email and password:
|
||||
# Try get username if we have in request email
|
||||
if email and not username:
|
||||
else:
|
||||
# Authentication without using allauth
|
||||
if email:
|
||||
try:
|
||||
username = UserModel.objects.get(email__iexact=email).username
|
||||
except UserModel.DoesNotExist:
|
||||
user = None
|
||||
if username:
|
||||
user = authenticate(username=username, password=password)
|
||||
pass
|
||||
|
||||
else:
|
||||
msg = _('Must include either "username" or "email" and "password".')
|
||||
raise exceptions.ValidationError(msg)
|
||||
if username:
|
||||
user = self._validate_username_email(username, '', password)
|
||||
|
||||
# Did we get back an active user?
|
||||
if user:
|
||||
|
|
Loading…
Reference in New Issue
Block a user