1

Django Allauth、特にLinkedIn 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プロバイダーによって公開されたすべてのデータにアクセスするための最良の方法は本当にありますか?

4

3 に答える 3

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'


 }
于 2013-11-14T14:45:14.603 に答える
1

私は新しいlinkedin_oauth2を使用していましたが、同じ問題に遭遇しました. 間違いを見つけるのに少し時間がかかりました。間違ったプロバイダー名を使用していました (「linkedin_oauth2」ではなく「linkedin」)

これが将来誰かに役立つことを願っています。

この (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']}
        }
于 2014-04-27T05:36:35.680 に答える