首页 > 解决方案 > django-rest-auth "此电子邮件地址的用户配置文件已存在。" 在登录

问题描述

我在我的 rest api 中使用 django rest auth 进行身份验证。我使用没有用户名字段的自定义用户模型。所以,我必须使用自定义登录序列化程序。但是当我登录时,django rest auth 说“这个电子邮件地址的用户配置文件已经存在。”。如何解决这个问题呢?

我的设置:

REST_USE_JWT = True
REST_AUTH_SERIALIZERS = {
    'LOGIN_SERIALIZER': 'accounts.api.serializers.RestAuthLoginSerializer',
    'REGISTER_SERIALIZER': 'accounts.api.serializers.RestAuthRegisterSerializer',
}
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USER_MODEL_USERNAME_FIELD = 'email'
ACCOUNT_USERNAME_REQUIRED = False

序列化程序.py

from rest_framework import serializers

from accounts.models import UserProfile


class RestAuthLoginSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('email', 'password')


class RestAuthRegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('email', 'password', 'first_name', 'last_name', 'business_name', 'is_business_account')

模型.py

class UserProfile(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    first_name = models.CharField(_('first name'), max_length=30, blank=True, null=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True, null=True)
    avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
    # business profile related data
    business_name = models.CharField(_('business name'), max_length=30, blank=True, null=True)
    business_phone = models.CharField(_('business phone'), max_length=20, blank=True, null=True)
    is_business_account = models.BooleanField(verbose_name=_("is business account"), default=False)

    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
    is_active = models.BooleanField(_('active'), default=True)
    is_admin = models.BooleanField(_('staff status'), default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

标签: pythondjangodjango-rest-frameworkdjango-rest-auth

解决方案


我发现了问题并自己解决了。我只需要添加

AUTHENTICATION_BACKENDS = (
   "django.contrib.auth.backends.ModelBackend",
   "allauth.account.auth_backends.AuthenticationBackend"
)

到 settings.py 文件。


推荐阅读