mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-20 21:46:04 -05:00
@@ -1,4 +1,7 @@
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import authenticate
|
||||
from rest_framework import serializers
|
||||
from rest_framework.authtoken.models import Token
|
||||
|
||||
from .models import User
|
||||
|
||||
@@ -77,3 +80,46 @@ class UserDetailSerializer(serializers.ModelSerializer):
|
||||
"default_channel_edit_url",
|
||||
)
|
||||
extra_kwargs = {"name": {"required": False}}
|
||||
|
||||
|
||||
class LoginSerializer(serializers.Serializer):
|
||||
email = serializers.CharField(max_length=255, required=False)
|
||||
username = serializers.CharField(max_length=255, required=False)
|
||||
password = serializers.CharField(max_length=128, write_only=True)
|
||||
token = serializers.CharField(max_length=255, required=False)
|
||||
|
||||
def validate(self, data):
|
||||
email = data.get('email', None)
|
||||
username = data.get('username', None)
|
||||
password = data.get('password', None)
|
||||
|
||||
if settings.ACCOUNT_AUTHENTICATION_METHOD == 'username' and not username:
|
||||
raise serializers.ValidationError('username is required to log in.')
|
||||
else:
|
||||
username_or_email = username
|
||||
if settings.ACCOUNT_AUTHENTICATION_METHOD == 'email' and not email:
|
||||
raise serializers.ValidationError('email is required to log in.')
|
||||
else:
|
||||
username_or_email = email
|
||||
|
||||
if settings.ACCOUNT_AUTHENTICATION_METHOD == 'username_email' and not (username or email):
|
||||
raise serializers.ValidationError('username or email is required to log in.')
|
||||
else:
|
||||
username_or_email = username or email
|
||||
|
||||
if password is None:
|
||||
raise serializers.ValidationError('password is required to log in.')
|
||||
|
||||
user = authenticate(username=username_or_email, password=password)
|
||||
|
||||
if user is None:
|
||||
raise serializers.ValidationError('User not found.')
|
||||
|
||||
if not user.is_active:
|
||||
raise serializers.ValidationError('User has been deactivated.')
|
||||
|
||||
token = Token.objects.filter(user=user).first()
|
||||
if not token:
|
||||
token = Token.objects.create(user=user)
|
||||
|
||||
return {'email': user.email, 'username': user.username, 'token': token.key}
|
||||
|
||||
Reference in New Issue
Block a user