2013-09-30 1 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.

Ответ: Кажется, мы определяем дополнительные PROFILE_FIELDS в settings.py, эти поля копируются в 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", чтобы получить все данные, упомянутые выше.

Я работаю с: Джанго-allauth == 0.14.2 и Джанго == 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']} 
     }