【问题标题】:Cannot Save Data Using Python Social Auth Django无法使用 Python Social Auth Django 保存数据
【发布时间】:2018-09-26 14:05:11
【问题描述】:

我正在尝试从 facebook 登录中获取性别并通过 Python Social Auth Django 将其保存到我的数据库中,但我无法弄清楚为什么它一直将其存储为空字符串。

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
    gender = models.CharField(max_length=20)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

views.py

def save_profile(backend, user, response, *args, **kwargs):
    if backend.name == 'facebook':
        sign_up = User.objects.get(username=user)
        sign_up.profile.gender = response.get('gender')
        sign_up.save()

settings.py

SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id, name, email, picture,gender'}

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'accounts.views.save_profile',
)

【问题讨论】:

  • 首先检查您是否从 facebook 响应中获取性别?
  • 在管理页面检查社交用户/身份验证模型,在额外的字段中它应该在那里
  • 是的,我可以确认响应正在显示它,并且在管理页面中它也显示为空白

标签: python django authentication social python-social-auth


【解决方案1】:

不要这样做 sign_up = User.objects.get(username=user)user 已经是 User 实例。此外,请验证 gender 是否是该 response 对象的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    相关资源
    最近更新 更多