如何使用 facebook 的 python social auth 获取用户电子邮件并保存
Posted
技术标签:
【中文标题】如何使用 facebook 的 python social auth 获取用户电子邮件并保存【英文标题】:how to get user email with python social auth with facebook and save it 【发布时间】:2014-03-24 22:47:08 【问题描述】:我正在尝试在 django 中实现 python-social-auth。
我希望用户通过 facebook 进行身份验证并保存他们的电子邮件。
我能够对用户进行身份验证,但电子邮件的扩展权限没有显示在 facebook 身份验证框中,并且它没有将电子邮件存储在数据库中。
在 settings.py 我有以下内容:
SOCIAL_AUTH_FACEBOOK_KEY='xxx'
SOCIAL_AUTH_FACEBOOK_SECRET='xxx'
FACEBOOK_EXTENDED_PERMISSIONS = ['email']
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'social.backends.email.EmailAuth',
'django.contrib.auth.backends.ModelBackend',
)
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/done/'
LOGOUT_REDIRECT_URL = '/'
URL_PATH = ''
SOCIAL_AUTH_STRATEGY = 'social.strategies.django_strategy.DjangoStrategy'
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.default.models.DjangoStorage'
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',
'social.pipeline.social_auth.associate_by_email',
# 'users.pipeline.require_email',
'social.pipeline.mail.mail_validation',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details'
)
facebook 对话框...
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:Facebook 登录 API 发生一些变化后 - Facebook 的 Graph API v2.4 您必须添加这些行才能获取电子邮件
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS =
'fields': 'id,name,email',
【讨论】:
是的.. 你还需要 EXTRA_PARAMS 完美,这会在用户重新登录时更新我的数据库中的用户。 这还能用吗?我无法让它工作,最糟糕的是它甚至不会产生任何错误日志,它只是默默地跳过电子邮件检索步骤。 即使使用此设置也无法检索电子邮件【参考方案2】:我认为问题在于使用 FACEBOOK_EXTENDED_PERMISSIONS。
根据http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html#oauth2,您应该使用:
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
【讨论】:
它还能正常工作吗?我无法让它工作。 您还需要 EXTRA_PARAMS。请参阅下面的答案。【参考方案3】:将此添加到您的 settings.py 文件中
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
【讨论】:
【参考方案4】:你是在测试网站上做的吗?
请重新阅读文档:[https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html#oauth2][1]
上面写着:
如果您在 Facebook 设置页面中定义重定向 URL,请务必不要定义 http://127.0.0.1:8000 或 http://localhost:8000,因为它在测试时不起作用
【讨论】:
以上是关于如何使用 facebook 的 python social auth 获取用户电子邮件并保存的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 3 中使用来自 Python 2 的 .so 模块?
如何更新 libstdc++.so.6 或更改要在 Tensorflow、Python 上使用的文件
如何在 Python 中使用 Regex 从 HTML <a> 标签中提取 Facebook 页面 URL?
Android 11 上的 Facebook 受众 6.2.0 /apex/com.android.art/lib64/libart.so (art::OatHeader::IsDebuggable(