Можно ли вообще узнать, существует ли адрес электронной почты, прежде чем создавать пользователя в Django?
У меня есть регистрационный сериализатор, в котором я присваиваю пользователю is_verfied=False
. И я хотел предотвратить создание поддельных учетных записей пользователями с плохими намерениями. Даже если они не могут войти в систему из-за проверки электронной почты, это все равно будет головной болью, если кто-то просто разместит много фальшивых пользователей.
class RegistrationSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email', 'password', 'cpf', 'is_active')
extra_kwargs = {
'password': {'write_only': True}
}
def validate(self, data):
return data
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
token = generate_email_verification_token.make_token(user)
verification_url = f"{os.environ.get('FRONTEND_URL')}/verify-email?uid={user.id}&token={token}"
subject = "..."
plain_message = (
"...{verification_url}..."
)
html_message = f"""
...{verification_url}...
"""
send_mail(
subject,
plain_message,
settings.DEFAULT_FROM_EMAIL,
[user.email],
html_message=html_message,
fail_silently=False,
)
return user
И я попытался, за исключением send_email
, удалить созданного пользователя, если возникали какие-либо проблемы (например, он не мог отправить электронное письмо, потому что этот почтовый ящик не существовал) при попытке отправить электронное письмо, но ничего не сработало:
try:
send_mail(
subject,
plain_message,
settings.DEFAULT_FROM_EMAIL,
[user.email],
html_message=html_message,
fail_silently=False,
)
except BadHeaderError: # If mail's Subject is not properly formatted.
print('Invalid header found.')
user.delete()
raise ValidationError
except SMTPException as e: # It will catch other errors related to SMTP.
user.delete()
print('There was an error sending an email.'+ e)
raise ValidationError
except: # It will catch All other possible errors.
user.delete()
print("Mail Sending Failed!")
raise ValidationError
Итак, есть ли какой-нибудь способ помешать недобросовестным пользователям создавать поддельные учетные записи электронной почты?