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

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

我不是在请求完整的代码,任何帮助都将非常感激。提前致谢!

你需要编写自定义管道,请尝试使用此链接:https://gist.github.com/revolunet/5104376 - Artem Bernatskyi
1个回答

4

python-social-auth 只会存储其需要填充模型字段的基本用户信息。如果来自提供程序的认证负载中包含任何额外信息,并且此类信息在EXTRA_DATA设置中进行了配置,它将作为extra_data属性的一部分存储到与社交相关的类中。

然而,python-social-auth 不会调用提供程序中的任何其他API以获取附加数据。为使其工作,您需要使用自己的方法增强PIPELINE,并在Facebook上调用这些附加端点。一旦有响应,就可以将其存储到项目适合的位置。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接