我在我的django项目中使用python social auth来提供Facebook登录功能。我可以在弹出窗口中看到Facebook提供的电子邮件。但它在我的部分管道中变得空洞。相同的代码与我的其他Facebook应用程序正常工作,除了api版本之外设置完全相同(以前它是2.3,现在是2.4)。没有选项可以将Facebook api版本更改为2.3。 我的python-social-auth版本是0.2.12 以下是我的设置文件中的相关数据
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email',]
FACEBOOK_EXTENDED_PERMISSIONS = ['email',]
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ['email',]
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'
SOCIAL_AUTH_LOGIN_ERROR_URL = '/'
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'home.pipeline.require_email',
'social.pipeline.social_auth.associate_by_email', # <--- enable this one
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
'home.pipeline.send_welcome_mail',
)
SOCIAL_AUTH_FACEBOOK_KEY = os.environ['SOCIAL_AUTH_FACEBOOK_KEY']
SOCIAL_AUTH_FACEBOOK_SECRET = os.environ['SOCIAL_AUTH_FACEBOOK_SECRET']
这是我的自定义部分管道功能
@partial
def require_email(strategy, backend, uid, details, user=None, *args, **kwargs):
print details
#some stuff......
此功能打印空电子邮件ID,如下所示
{'username': u'Anurag Jain', 'fullname': u'Anurag Jain', 'last_name': u'Jain', 'email': '', 'first_name': u'Anurag'}
任何人都可以帮我解决这个问题。
答案 0 :(得分:7)
事实证明,Facebook api v2.4发生了一些变化,导致电子邮件空白。已经存在一个问题 https://github.com/omab/python-social-auth/issues/675
解决方案是将以下设置添加到django配置文件
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
'fields': 'id,name,email', # needed starting from protocol v2.4
}