2015-07-28 105 views
3

我使用python社交授權與我的django項目提供Facebook登錄功能。我可以在彈出窗口中看到Facebook上提供的電子郵件。但是在我的部分管道中它已經空空如也。相同的代碼與我的其他Facebook應用程序工作正常,除了api版本(以前是2.3和現在的2.4)完全相同的設置。沒有選擇將Facebook api版本更改爲2.3。 我的蟒蛇 - 社會 - 權威性的版本是0.2.12 以下是相關數據從我的設置文件python social auth and django,email with Facebook api 2.4

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'} 

任何人可以幫我找出這個問題與此有關。

回答

6

事實證明,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 
} 
+0

多德感謝尋找解決方案花了幾個小時! – user875139

相關問題