我正在尝试向linkedinAPI发出进一步的请求,为此我需要令牌和token_secret。
我在linkedin中有几个测试帐户,所有登录过程都成功,但是token_secret存储(所有这些都是空的)。
这是一个错误吗?我怀疑是因为在subsecuent oauth2调用中使用pair token / token_secret我从linkedin获得以下内容
{ "errorCode": 0, "message": "[unauthorized]. The token used in the OAuth request is not valid. AQVvM2f2qefU3vULPS-R46DXN8Mnra9ImG14hzeTvMMcXvBVOEiUl4RTZCJrdFZoTfGGN1fFzLvxG-O_UWB8s8EDr35ZsgwW59y4KilndoEkr105Sg2GR90jmUxpqxU572IiARjN5gxAjfoWC4-_UupKlEtafQn23XQqvXeuLvE-FsPAaSA", "requestId": "VOAL1ULK4X", "status": 401, "timestamp": 1395348629428 }
更多详情: 我使用shell检查这些令牌:
from allauth.socialaccount.models import SocialToken
map(lambda st: st.token_secret, SocialToken.objects.all())
我得到空输出:
[u'', u'', u'']
答案 0 :(得分:0)
我自己找到了一个解决方案,所以我会解释它。
我对oauth2并不是很了解所以我也不知道这个过程,如果有一个空的secret_token是正常的。所以我在django-allauth代码中调试了一下,我看到他们执行的请求只使用了令牌(没有秘密令牌)
然后我改变了库并开始使用他们做的相同:请求。使用以下简单脚本,我可以向linkedin API发出任何其他请求:
def see_my_groups_json(request, url):
import requests
token = SocialToken.objects.get(account__user_id=request.user.pk)
resp = requests.get(url, params={'oauth2_access_token': token.token})
return resp.json()
答案 1 :(得分:0)
您应该检查linkedin提供商的SCOPE参数。例如,下一个配置请求访问用户的电子邮件地址,基本配置文件以及代表用户读取和共享更新的权限。
SOCIALACCOUNT_PROVIDERS = {
'linkedin_oauth2': {
'SCOPE': ['r_emailaddress', 'r_basicprofile', 'rw_nus'],
'PROFILE_FIELDS': ['id', 'first-name', 'last-name', 'email-address', 'picture-url', 'public-profile-url']
}
}
如果在生成令牌之后,我们尝试进行需要其他特权的API调用,我们将获得401状态代码HTTP响应。
django-allauth,默认情况下,r_emailaddress范围或根本没有,具体取决于是否启用了SOCIALACCOUNT_QUERY_EMAIL。
希望这会对你有所帮助。