Twitter未经授权返回用户时间线,但未进行搜索

时间:2017-05-16 16:32:32

标签: node.js api twitter oauth

我已经设置了一个应用程序,并从“应用程序设置”页面(https://apps.twitter.com/app/APP_ID/keys)获取了使用者密钥和密钥。该应用具有“读写”权限。

我还在此页面上为我的用户帐户生成了访问令牌和密码,但我已经完成了Oauth流程的步骤,授权了应用程序并通过该路由检索了相同的令牌和秘密。

如果我使用这些凭据从搜索API请求(即https://api.twitter.com/1.1/search/tweets.json),那么我会得到一个成功的回复。但是,当从用户时间线端点执行相同操作时,尽管授权应用程序,但我得到HTTP401响应,说“未授权”。

这是我正在做的一个例子:

import request from 'request-promise';

const twitterOauthConfig = {
    consumer_key: process.env.TWITTER_CONSUMER_KEY,
    consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
    access_token_key: 'MY USER TOKEN KEY',
    access_token_secret: 'MY USER TOKEN SECRET'
};

const getRequestOptions = (user, tag) => {
    return {
        uri: 'https://api.twitter.com/1.1/statuses/user_timeline.json',
        qs: {
            q: `user_id=${user}&screen_name=${user}&tag=${tag}`
        },
        headers: {
            Accept: '*/*',
            Connection: 'close'
        },
        json: true,
        oauth: twitterOauthConfig
    };
}

const options = getRequestOptions('example_screen_name', 'example_hash_tag');
request(options)
    .then((response) => {
        // ...
    });

有谁知道我为什么会收到这个错误?

1 个答案:

答案 0 :(得分:0)

我现在已经解决了这个问题,TL; DR:我需要检查我的应用程序用户在Application Management panel中匹配的访问级别,并重新生成我的访问令牌/秘密。

  

我收到HTTP401回复,说“未经授权。”

通过将此与API docs around Error Codes & Responses进行比较,我发现这必须是“缺少或不正确的身份验证凭据”。

我仔细检查了我的应用程序的应用程序管理面板,检查我是否正确复制了密钥/令牌/秘密,但也查看是否存在其他差异。

我注意到我的应用程序访问级别设置为“读取和写入”,但我的用户访问令牌访问级别仅设置为“读取”。

通过在该页面上重新生成Access令牌和密码,我能够成功检索用户时间线。

这对我来说并没有太大的意义 - 鉴于两者都具有'读'访问级别,我不确定为什么他们需要完全匹配,但它已经修复了问题