Django的Python Social Auth-如何检索额外数据?

时间:2018-10-30 22:51:29

标签: python django facebook python-social-auth

对于我的第一个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',
)

我并不需要完整的代码,将不胜感激。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

python-social-auth只会存储填充模型字段所需的基本用户信息,如果提供程序的auth有效负载中包含其他任何内容,并且已在EXTRA_DATA设置中进行了配置,也可以作为extra_data属性的一部分存储在与社会相关的类中。

不过,python-social-auth不会调用提供程序中的任何其他API来获取其他数据,为了正常工作,您需要使用将在以下位置调用这些其他端点的方法来增强PIPELINE: Facebook,一旦收到响应,您就可以存储它,使其适合您的项目。

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