python - 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 = []
解决方案
我发现了问题并自己解决了。我只需要添加
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend"
)
到 settings.py 文件。
推荐阅读
- rbind - 错误:“dimnames”[2] 的长度不等于数组范围 - 但列数等于列名数
- python - 事件发生时在python中收集数据点
- reactjs - 我的 fetch 没有上传 JSON 字符串,我在代码中看不到错误
- git - Bitbucket PR 显示没有变化
- javascript - QGIS2web 中的标签不可编辑
- c# - 按用户角色筛选 LINQ 查询
- javascript - GraphQL 突变 - 类型错误 - 一对多关系
- php - 我可以将 Laravel 应用程序部署到共享主机吗?
- gitlab - 有没有办法对 MR 差异运行 lints/代码样式检查并内联发布结果?
- python - Python - Osmnx - 使用缓存或本地映射来减少计算时间