You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用twitter-api-v2获取速率限制遇认证错误,如何解决?

问题:调用Twitter API获取速率限制时认证失败

我尝试使用node-twitter-api-v2库及其速率限制插件调用Twitter API,代码如下:

import dotenv from 'dotenv'
import { TwitterApi } from 'twitter-api-v2';
import { TwitterApiRateLimitPlugin } from '@twitter-api-v2/plugin-rate-limit'

dotenv.config()

const API_KEY = process.env.TWITTER_API_KEY;
const API_SECRET = process.env.TWITTER_API_SECRET;
const BEARER_TOKEN = process.env.BEARER_TOKEN;

const rateLimitPlugin = new TwitterApiRateLimitPlugin()
// Instantiate with desired auth type (here's Bearer v2 auth)
const twitterClient = new TwitterApi(process.env.BEARER_TOKEN, { plugins: [rateLimitPlugin] });
//const twitterClient = new TwitterApi({ appKey: API_KEY, appSecret: API_SECRET }, { plugins: [rateLimitPlugin] });

await twitterClient.v2.me()

const currentRateLimitForMe = await rateLimitPlugin.v2.getRateLimit('users/me')
console.log(currentRateLimitForMe.limit) // 75
console.log(currentRateLimitForMe.remaining) // 74

调用时出现如下错误:

'Unsupported Authentication: Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint. Supported authentication types are [OAuth 1.0a User Context, OAuth 2.0 User Context].'

我猜测问题出在认证方式上,已尝试BEARER令牌和API Key,但均无效。请问如何正确获取速率限制信息?


解决方案

错误原因

users/me(即twitterClient.v2.me())接口属于需要用户上下文的接口,不支持应用级认证(Bearer令牌、仅API Key/Secret都属于应用级认证),必须使用用户上下文认证(OAuth 1.0a 用户上下文或 OAuth 2.0 用户上下文)。

正确实现步骤

1. 准备用户上下文认证凭证

你需要在Twitter开发者平台获取以下凭证(以OAuth 1.0a为例):

  • API Key(即appKey)
  • API Secret(即appSecret)
  • Access Token
  • Access Token Secret

将这些凭证添加到你的.env文件中。

2. 修改后的代码

import dotenv from 'dotenv'
import { TwitterApi } from 'twitter-api-v2';
import { TwitterApiRateLimitPlugin } from '@twitter-api-v2/plugin-rate-limit'

dotenv.config()

const API_KEY = process.env.TWITTER_API_KEY;
const API_SECRET = process.env.TWITTER_API_SECRET;
const ACCESS_TOKEN = process.env.TWITTER_ACCESS_TOKEN;
const ACCESS_TOKEN_SECRET = process.env.TWITTER_ACCESS_TOKEN_SECRET;

const rateLimitPlugin = new TwitterApiRateLimitPlugin()

// 使用OAuth 1.0a用户上下文认证初始化客户端
const twitterClient = new TwitterApi({
  appKey: API_KEY,
  appSecret: API_SECRET,
  accessToken: ACCESS_TOKEN,
  accessTokenSecret: ACCESS_TOKEN_SECRET,
}, { plugins: [rateLimitPlugin] });

// 调用接口(认证方式符合要求)
await twitterClient.v2.me()

// 获取目标接口的速率限制信息
const currentRateLimitForMe = await rateLimitPlugin.v2.getRateLimit('users/me')
console.log(currentRateLimitForMe.limit)
console.log(currentRateLimitForMe.remaining)

3. 补充说明

  • 若选择OAuth 2.0用户上下文认证,需通过OAuth授权流程获取用户级Bearer令牌(区别于开发者平台直接生成的应用级Bearer令牌),再用该令牌初始化TwitterApi,同样可通过插件获取速率限制。
  • 应用级认证仅适用于不需要用户上下文的公开接口(如搜索公开推文、获取公开用户资料),涉及当前用户信息的接口必须使用用户上下文认证。

内容的提问来源于stack exchange,提问作者Ritzy Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:30:58