Django-allauth使用linkedin_oauth2存储空的token_secret

时间:2014-03-20 20:46:01

标签: oauth-2.0 django-allauth

我正在尝试向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'']

2 个答案:

答案 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)

您应该检查提供商的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响应。

,默认情况下,r_emailaddress范围或根本没有,具体取决于是否启用了SOCIALACCOUNT_QUERY_EMAIL。

希望这会对你有所帮助。