【问题标题】:Python Social Auth with Django - how to retrieve extra data?Python Social Auth with Django - 如何检索额外数据?
【发布时间】:2019-04-04 01:35:26
【问题描述】:

对于我的第一个 Django 项目,我想将 Python Social Auth 用于社交身份验证(即 Facebook)。
Django==2.0
social-auth-app-django==2.1.0
social-auth-core==1.7.0

如何从已登录用户的个人资料中检索额外数据?我的目标是根据他们所属的 FB 组将登录用户过滤到自定义组。但是此时我什至无法收到电子邮件,只有用户名。

在我的 settings.py 中:

SOCIAL_AUTH_FACEBOOK_KEY = 'xxxx'
SOCIAL_AUTH_FACEBOOK_SECRET = 'xxxx'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'groups_access_member_info']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id, name, email',
    'edges': 'groups'
}

管道是基本的管道:

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

我不是要求完整的代码,任何帮助将不胜感激。

提前谢谢你!

【问题讨论】:

标签: python django facebook python-social-auth


【解决方案1】:

python-social-auth 将只存储填充模型字段所需的基本用户信息,如果任何额外的内容是来自提供者的身份验证负载的一部分,并且它在 EXTRA_DATA 设置中进行了配置,它也将存储在社交相关类作为extra_data 属性的一部分。

不过,python-social-auth 不会调用提供程序中的任何其他 API 来获取额外的数据,为此,您需要使用将在 Facebook 上调用这些额外端点的方法来增强 PIPELINE,一次使用响应,您可以将其存储为适合您的项目。

要调试默认情况下来自提供程序的内容,请在步骤之间添加debug 管道 (social_core.pipeline.debug.debug)。如果您要查找的内容已经是有效负载的一部分,请记下密钥名称并将其添加到 EXTRA_DATA 设置中。如果不是,那么您需要添加一个方法来调用 Facebook API 来检索额外信息。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多