【问题标题】:Twitter returns unauthorized for user timeline but not searchTwitter 返回未经授权的用户时间线但未搜索
【发布时间】:2017-10-15 20:37:02
【问题描述】:

我已经设置了一个应用程序,并从“应用程序设置”页面 (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) => {
        // ...
    });

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

【问题讨论】:

  • 我在使用仅应用程序身份验证时也遇到了类似的问题,并且可以使用相同的数据从 Postman 重新创建(消除此特定代码中存在错误的可能性)。

标签: node.js api twitter oauth


【解决方案1】:

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

我收到一个 HTTP401 响应,说“未授权”。

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

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

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

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

这对我来说没有巨大的意义 - 鉴于最初两者都具有“读取”访问级别,我不确定为什么它们需要完全匹配,但它已修复问题。

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 2014-08-11
    • 2017-10-16
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多