我正在尝试在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对话框......
我该如何解决这个问题?
答案 0 :(得分:47)
在Facebook登录API发生一些变化后 - Facebook的Graph API v2.4 您必须添加这些行才能获取电子邮件
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
'fields': 'id,name,email',
}
答案 1 :(得分:14)
我认为问题在于使用FACEBOOK_EXTENDED_PERMISSIONS。
根据http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html#oauth2你应该使用:
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
答案 2 :(得分:0)
将此添加到您的settings.py文件
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
答案 3 :(得分:0)
您正在测试网站上吗?
请重新阅读文档:[https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html#oauth2][1]
它说:
如果您在Facebook设置页面中定义了重定向URL,请确保不要定义http://127.0.0.1:8000或http://localhost:8000,因为它在测试时将无法工作