Twitter API返回“无效或过期的令牌。”

问题描述 投票:1回答:1

我有一个简单的应用程序,它不使用很多软件包。所以我认为这是尝试Deno的绝佳机会,我确实需要的不是第三方模块的一个软件包是Twitter API。我以为没有问题,因为我不需要它包含的许多功能。我自己写吧!

所以我写了一个函数,用于使用Twitter文档中的此doc来生成Bearer令牌:

function getOAuthBearer(consumer_key, consumer_secret) {
    const basic = Buffer.from(`${consumer_key}:${consumer_secret}`).toString('base64')
    const options = {
        url: 'https://api.twitter.com/oauth2/token',
        method: 'POST',
        headers: {
            'Authorization': `Basic ${basic}`,
            'Content-Type': `application/x-www-form-urlencoded;charset=UTF-8`
        },
        body: querystring.stringify({
            'grant_type': 'client_credentials'
        })
    };

    return new Promise((resolve, reject) => {
        request(options, (error, response, body) => {
            if (error) reject(error);
            else resolve(JSON.parse(body).access_token);
        });  
    });
}

哪个工作!我获得了承载令牌,因此编写了一个函数,可以从此user_timeline]的请求示例中获取一些doc信息

function getUserTimeline(bearer_token) {
    const options = {
        url: 'https://api.twitter.com//1.1/statuses/user_timeline.json?count=100&screen_name=twitterapi',
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + Buffer.from(bearer_token).toString('base64'),
        }
    }

    return new Promise((resolve, reject) => {
        request(options, (error, response, body) => {
            if (error) reject(error);
            else resolve(JSON.parse(body));
        });  
    });
}

哪个返回此:

{错误:[{代码:89,消息:'无效或过期的令牌。' }]}

这很奇怪,但我认为我可以使载体无效并请求为其编写此功能的新载体:

function invalideOAuthBearer(consumer_key, consumer_secret, bearer_token) {
    const basic = Buffer.from(`${consumer_key}:${consumer_secret}`).toString('base64');
    const options = {
        url: 'https://api.twitter.com/oauth2/invalidate_token',
        method: 'POST',
        headers: {
            'Authorization': `Basic ${basic}`,
            'Content-Type': `application/x-www-form-urlencoded;charset=UTF-8`
        },
        body: querystring.stringify({
            'access_token': bearer_token
        })
    };

    return new Promise((resolve, reject) => {
        request(options, (error, response, body) => {
            if (error) reject(error);
            else resolve(JSON.parse(body));
        });  
    });
}

但是返回:

{错误:[{代码:348,消息:'不允许客户端应用程序使此令牌无效。' }]}

所以现在我有点卡住了,我尝试重新生成我的凭据,但这没什么用。我在网上搜索过,但只能找到老人们说这是一个错误/基础结构问题,但是由于使用Twitter API的应用程序太多,这在我看来似乎不太可能,当然,有些人建议使用[C0 ],但是我想说Deno平台没有这样的软件包:(

我有一个简单的应用程序,它不使用很多软件包。因此,我认为这是尝试Deno的绝佳机会,我需要的不是第三方模块的软件包是...

javascript twitter oauth-2.0
1个回答
2
投票

承载令牌不应该使用base64编码。试试这个:

© www.soinside.com 2019 - 2024. All rights reserved.