似乎这不是一个独特的问题,但我在解决方案中遗漏了一些东西。我正在使用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
1 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
这不起作用的原因是该create_user
函数显式过滤 的内容以仅包含在setting中指定的details
键。这默认为USER_FIELDS
USER_FIELDS = ['username', 'email']
所以其他任何东西都被忽略了。它似乎没有记录,但您应该能够通过创建如下设置来覆盖它:
SOCIAL_AUTH_USER_FIELDS = ['username', 'email', 'role']
这将确保您role
被传递到用户实例。
您的管道和配置的其余部分看起来不错。
添加回答
举报
0/150
提交
取消