如何使用python social auth和facebook获取用户电子邮件并保存我

2024-05-17 03:18:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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对话框。。。

enter image description here

我该怎么解决?


Tags: django用户auth身份验证urlfacebookpipeline电子邮件
3条回答

在Facebook登录API做了一些更改之后-Facebook的Graph API v2.4 您必须添加这些行才能获取电子邮件

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id,name,email', 
}

将此添加到settings.py文件

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

我认为问题在于使用FACEBOOK扩展权限。

根据http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html#oauth2,您应该使用:

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

相关问题 更多 >