当前位置: 首页 > 知识库问答 >
问题:

django-rest-auth"此电子邮件地址的用户配置文件已经存在。"在登录

国晟睿
2023-03-14

我在RESTAPI中使用django rest auth for 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

序列化程序。派克

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')

模型。派克

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 = []

共有1个答案

齐鸿光
2023-03-14

我发现了问题,自己解决了。我只是不得不加上

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

settings.py文件。

 类似资料:
  • 问题内容: 我正在尝试创建一个auth后端,以允许我的用户使用他们的电子邮件地址或他们在Django 1.6中使用自定义用户模型的用户名登录。当我使用用户名登录时,后端工作正常,但由于某种原因,没有电子邮件。有什么我忘记要做的事吗? 编辑:按照建议,我已从ModelBackend继承并将其安装在我的设置中。在我的设置中,我有这个(,)并且我将后端更改为这个: 现在我得到一个错误。 问题答案: 遵循

  • 我制作了一个自定义用户模型。注册和注销工作正常。但我已经使用该模型制作了一个登录表单。我的型号是usersignupmodel。但无论何时在注册后,如果我尝试登录,它都会给我一个类似于

  • 实现django 2登录和注册的最佳方式是什么instagram.com.用户可以用用户名和电子邮件或电话和密码注册。注册后,用户可以用电子邮件地址、电话号码或用户名登录。 谢谢

  • 在我的公司,我们正在实现DocuSign的一些部分,并且遇到了一个我们认为restapi不支持的场景。 有时我们系统中的用户会更改电子邮件地址。我们希望为用户将此更改推送到DocuSign,而无需用户登录DocuSign并通过控制台手动更改他们的电子邮件地址。当然,这会更改用户在DocuSign的登录页面上进行身份验证的用户名。 是否可以使用DocuSign REST API更改用户的电子邮件地址

  • 问题内容: 在Django中无需滚动我自己的身份验证系统,有什么好方法吗?我希望用户名是用户的电子邮件地址,而不是他们创建用户名。 问题答案: 这不是一个“完整”的解决方案,但可以满足你的大部分需求。

  • 问题内容: 我的网站已设置为没有用户名(或者说user.username = user.email)。如果用户尝试输入数据库中已经存在的用户名,则Django会显示一条错误消息,但是由于我没有使用用户名进行注册,所以我不知道该怎么做。 就像已经有默认设置一样,我不想重新加载页面以查找是否已经有与用户关联的电子邮件地址。我的猜测是使用Ajax,但我不知道该怎么做。Ive看过其他帖子,但最近似乎没有任

  • 问题内容: 我的django.contrib.auth用户模型有一个问题,其中电子邮件max_length为75。 我从facebook api接收到超过75个字符的电子邮件地址,我需要(真的很想)将它们存储在用户中,以便来自facebook connect和其他用户的连续性。 我可以通过手动编辑mySql数据库中的字段来解决“ ”问题,但是 有更好的方法来解决此问题吗? 最好是一个 不涉及我 每

  • 问题内容: 我希望django通过电子邮件而非用户名对用户进行身份验证。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个,所以我不能有一个。 另一个原因是所有电子邮件都是唯一的,但有时用户名已被使用。因此,我将自动创建用户名为。 我该如何更改才能让Django通过电子邮件进行身份验证? 这就是我创建用户的方式。 这就是我的登录方式。 除了先获取用户名外,登录还有其他方法吗?