2013-09-30 77 views
1

我有一個應用程序,我正在試驗Django Allauth,特別是LinkedIn的API。Django allauth鏈接在API不返回完整的個人資料

我定義在我的設置範圍,像這樣:

SOCIALACCOUNT_PROVIDERS = \ 
{ 
    'linkedin': 
    { 
     'SCOPE': ['r_fullprofile', 'r_emailaddress'] 
    } 
} 

,我使用輸出此信息爲模板:

{% extends 'base.html' %} 
{% load auth_extras %} 
{% load account %} 
{% load socialaccount %} 

{% block content %} 
{% if user.is_authenticated %} 

{% for key, value in user.socialaccount_set.all.0.extra_data.items %} 
<ul> 
    <li>{{ key }}: {{ value }}</li> 
</ul> 
{% endfor %} 
{% endif %} 
{% endblock content %} 

當我授權的帳戶,通過LinkedIn,我可以看到它正在要求批准基本簡介,電子郵件地址和完整檔案。但user.socialaccount_set.all.0.extra_data對象只具有基本的配置文件和電子郵件地址數據。完整的配置文件數據發生了什麼?

此外,是否user.socialaccount_set.all.0.extra_data真的是訪問由提供商公開的所有數據的最佳方式?

任何幫助非常感謝。

回答

3

我最近遇到這個問題,碰到這個:https://github.com/pennersr/django-allauth/issues/397

簡答:看來如果我們在settings.py中定義了額外的PROFILE_FIELDS,那些字段將被複制到extra_data中。

所以爲了完整性這裏是我的settings.py(其中包括Facebook和LinkedIn)

SOCIALACCOUNT_PROVIDERS = \ 
    {'facebook': {'SCOPE': ['email', 'user_about_me', 'user_birthday', 
          'user_education_history','user_work_history', 
          'user_hometown', 
          'user_location', 
          'user_religion_politics','user_subscriptions', 
          'read_stream', 
          'read_insights', 
          'read_friendlists', 
          'user_likes', 
          'user_interests', 
          'user_groups' 
          ], 
        'AUTH_PARAMS': {}, 
        'METHOD': 'oauth2' 
       }, 

    'linkedin': {'SCOPE': ['r_emailaddress', 'r_fullprofile', 'r_emailaddress', 'r_contactinfo', 'r_network'], 
        'PROFILE_FIELDS': ['id', 'first-name', 
           'last-name', 
           'email-address', 
           'picture-url', 
           'public-profile-url', 'skills', 'headline' 
        ] 
    } 
    } 

,我還可以使用打印技術和標題:

@receiver(user_logged_in) 
def populate_profile_login2(request, **kwargs): 
{ 
    try: 
     extra_data = kwargs.get('user').socialaccount_set.filter(provider='linkedin')[0].extra_data 
     for key, value in extra_data.iteritems(): 
      print key, value 
    except: 
     print ' NOT LINKEDIN' 


} 
0

在我的LinkedIn配置(設置.py)它適用於:

SOCIALACCOUNT_PROVIDERS = \ 
{ 
'linkedin': 
    {'SCOPE': [ 'r_emailaddress', 
       'r_fullprofile', 
       'r_emailaddress', 
       'r_contactinfo', 
       'r_network'], 
     'PROFILE_FIELDS': 
      [ 
       'id', 
       'first-name', 
       'last-name', 

       'email-address', 
       'picture-url', 
       'public-profile-url', 
       'skills', 

       'headline', 
       'industry', 

       'num-connections', 
       'positions', 
       'interests', 
       'languages', 
       'certifications', 
       'educations', 
       'courses', 
       'three-current-positions', 
       'three-past-positions', 
       'recommendations-received', 
       'honors-awards' 
      ] 
    } 
} 

所有的字段定義在: http://developer.linkedin.com/documents/profile-fields

你必須確保你是在範圍「r_fullprofile」獲得上述的所有數據。

我的工作: Django的allauth == 0.14.2 和 Django的== 1.5.1

我希望幫助!

1

我正在使用新的linkedin_oauth2並遇到同樣的問題。 花了我一點時間來找出我的錯誤,我使用了錯誤的提供者名稱('linkedin'而不是'linkedin_oauth2')

希望這將有助於未來的其他人。

此(settings.py)配置按預期工作。

SOCIALACCOUNT_PROVIDERS = \ 
     'linkedin_oauth2': {'SCOPE': ['r_fullprofile', 'r_emailaddress'], 
        'PROFILE_FIELDS': ['id', 'first-name', 
           'last-name', 
           'email-address', 
           'picture-url', 
           'public-profile-url', 
           'skills', 'headline']} 
     } 
相關問題