我有一个应用程序,我正在尝试使用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
真的是访问提供商公开的所有数据的最佳方式吗?
答案 0 :(得分: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'
}
答案 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']}
}
答案 2 :(得分:0)
在我的linkedin配置(settings.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
我希望有所帮助!