17

我正在尝试在 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'
)

脸书对话框...

在此处输入图像描述

我该如何解决这个问题?

4

4 回答 4

54

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

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id,name,email', 
}
于 2016-01-07T09:27:52.593 回答
14

我认为问题在于使用 FACEBOOK_EXTENDED_PERMISSIONS。

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

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

于 2014-02-23T12:45:54.513 回答
0

将此添加到您的 settings.py 文件中

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
于 2015-08-19T03:26:40.543 回答
0

你是在测试网站上做的吗?

请重新阅读文档:[ https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html#oauth2][1]

它说:

如果您在 Facebook 设置页面中定义重定向 URL,请务必不要定义http://127.0.0.1:8000http://localhost:8000,因为它在测试时不起作用

于 2019-09-30T18:01:36.823 回答