51 lines
2 KiB
Python
51 lines
2 KiB
Python
from rest_framework import serializers
|
|
from allauth.account import app_settings as allauth_settings
|
|
from allauth.utils import email_address_exists
|
|
from allauth.account.adapter import get_adapter
|
|
from allauth.account.utils import setup_user_email
|
|
from django.utils.translation import gettext as _
|
|
|
|
class RegisterSerializer(serializers.Serializer):
|
|
"""
|
|
Custom serializer to allow users to register with only
|
|
their email address, first and last name, and password.
|
|
"""
|
|
email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
|
|
first_name = serializers.CharField(required=True, write_only=True)
|
|
last_name = serializers.CharField(required=True, write_only=True)
|
|
password1 = serializers.CharField(required=True, write_only=True)
|
|
password2 = serializers.CharField(required=True, write_only=True)
|
|
|
|
def validate_email(self, email):
|
|
email = get_adapter().clean_email(email)
|
|
if allauth_settings.UNIQUE_EMAIL:
|
|
if email and email_address_exists(email):
|
|
raise serializers.ValidationError(
|
|
_("A user is already registered with this e-mail address."))
|
|
return email
|
|
|
|
def validate_password1(self, password):
|
|
return get_adapter().clean_password(password)
|
|
|
|
def validate(self, data):
|
|
if data['password1'] != data['password2']:
|
|
raise serializers.ValidationError(
|
|
_("The two password fields didn't match."))
|
|
return data
|
|
|
|
def get_cleaned_data(self):
|
|
return {
|
|
'first_name': self.validated_data.get('first_name', ''),
|
|
'last_name': self.validated_data.get('last_name', ''),
|
|
'password1': self.validated_data.get('password1', ''),
|
|
'email': self.validated_data.get('email', ''),
|
|
}
|
|
|
|
def save(self, request):
|
|
adapter = get_adapter()
|
|
user = adapter.new_user(request)
|
|
self.cleaned_data = self.get_cleaned_data()
|
|
adapter.save_user(request, user, self)
|
|
setup_user_email(request, user, [])
|
|
user.save()
|
|
return user
|