如何通过django-allauth 0.35.0获取LinkedIn的r_basicprofile等字段
解决django-allauth 0.35.0 LinkedIn OAuth2获取位置和职位字段的问题
Hey there! 我之前刚好折腾过django-allauth和LinkedIn的OAuth2登录配置,给你说下怎么正确设置才能拿到位置和职位字段:
首先得明确两点:LinkedIn的旧版API(django-allauth 0.35.0适配的是这个版本)里,r_basicprofile权限已经覆盖了位置(location)和职位(positions)的访问权限,所以我们只需要在配置里指定要拉取的具体字段就行。
正确的SOCIALACCOUNT_PROVIDERS配置
直接在settings.py里这么写:
SOCIALACCOUNT_PROVIDERS = { 'linkedin': { # 必须包含r_basicprofile权限,不然拿不到位置和职位 'SCOPE': ['r_basicprofile'], # 指定要从LinkedIn拉取的字段,把location和positions加上 'PROFILE_FIELDS': [ 'id', 'first-name', 'last-name', 'email-address', 'picture-url', 'location', 'positions', # 其他你需要的基础字段可以继续加在这里 ] } }
验证是否获取到了字段
用户登录后,你可以通过用户的社交账号数据查看拉取到的内容。比如在视图里加个调试代码:
from django.shortcuts import HttpResponse def check_linkedin_data(request): if request.user.is_authenticated: # 获取用户关联的第一个LinkedIn账号 linkedin_account = request.user.socialaccount_set.filter(provider='linkedin').first() if linkedin_account: # extra_data里就是从LinkedIn拉取到的所有字段 return HttpResponse(str(linkedin_account.extra_data)) return HttpResponse("请先通过LinkedIn登录")
访问这个视图就能看到location和positions的具体内容了。
注意事项
- 确保你在LinkedIn开发者后台创建的应用已经开启了
r_basicprofile权限,开发测试环境一般不需要审核就能用,但正式环境可能需要提交审核。 - 因为django-allauth 0.35.0用的是LinkedIn v1 API,所以字段名必须用v1的格式(比如
first-name而不是新版的localizedFirstName),别搞错了哦。
内容的提问来源于stack exchange,提问作者seuling
相关产品推荐
相关产品推荐

