似乎这不是一个独特的问题,但我在解决方案中遗漏了一些东西。我正在使用python-social-authGoogle 并登录。一切似乎都很顺利,直到它进入create_user管道的一部分。我确实有一个自定义用户模型和 UserManager。在我的 User 模型上,我确实有一个role与某些choices. 当社交身份验证启动并让某人登录时,它会调用create_user我的用户管理器,但它只是传递电子邮件,没有其他字段。我试图role通过将其添加到社交身份验证字典来连接到管道并添加所需的属性details,但这似乎没有任何效果。我应该如何挂钩到 create user 属性以添加就社交身份验证而言不存在的字段?
用户模型
class User(AbstractBaseUser, PermissionsMixin):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
email = models.EmailField(_("email address"), unique=True)
first_name = models.CharField(max_length=240, blank=True)
last_name = models.CharField(max_length=240, blank=True)
role = models.IntegerField(choices=RoleChoices.choices)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
@property
def full_name(self):
return f"{self.first_name} {self.last_name}".strip()
我的用户管理器:
class UserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifiers
for authentication instead of usernames.
"""
def create_user(self, email, password, **extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError(_("The Email must be set"))
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
if password is not None:
user.set_password(password)
user.save()
return user
小怪兽爱吃肉
相关分类