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

Twitter API OAuth2授权码无效问题排查与解决求助

Twitter OAuth2授权码验证报错:invalid_request(错误码131)

我参考Twitter OAuth2用户授权文档实现了授权流程,但调用loginWithOAuth2时返回以下错误:

{
  error: 'invalid_request',
  error_description: 'Value passed for the authorization code was invalid.',
  errors: [ { code: 131, message: 'invalid_request' } ]
}

我的代码实现如下:

Client.ts

import { TwitterApi } from "twitter-api-v2";
import { TWITTER_API_CLIENT_ID, TWITTER_API_CLIENT_SECRET } from "./constants";

export const client = new TwitterApi({
  clientId: TWITTER_API_CLIENT_ID,
  clientSecret: TWITTER_API_CLIENT_SECRET,
});

授权链接生成逻辑

const { url, codeVerifier } = twitterClient.generateOAuth2AuthLink(
      TWITTER_API_REDIRECT_URL,
      {
        scope: [
          "tweet.read",
          "tweet.write",
          "users.read",
          "offline.access",
          "follows.read",
        ],
      }
    );

await UserAPI.create({
        userId,
        codeVerifier,
        status: UserAPIStatus.PENDING,
      }).save();

获取授权码逻辑

const router = useRouter();
const authCode = router.query.code as string | undefined;
  useEffect(() => {
    if (me?.hasTwitterAccess) return;

    const fetch = async (authCode: string) => {
      await validateTwitterApiAccess({
        options: {
          authCode,
        },
      });
    };

    if (authCode) fetch(authCode);
  }, [fetching, authCode]);

授权码验证逻辑

const userAPI = await UserAPI.findOne({
      userId,
      type: UserAPIType.TWITTER,
    });

twitterClient.loginWithOAuth2({
        code: authCode,
        codeVerifier: userAPI.codeVerifier,
        redirectUri: TWITTER_API_REDIRECT_URL,
      })

排查方向与解决方法

  1. 确认授权码与codeVerifier的配对关系

    • 每个授权链接生成的codeVerifier必须和对应的授权码一一绑定。检查UserAPI.create时是否正确关联了当前用户的userId,以及验证时UserAPI.findOne是否准确获取到了对应会话的codeVerifier(比如是否存在多个未完成的授权记录,导致取到了旧的verifier)。
    • 授权码是一次性的,重复提交同一个code会直接触发失效错误。
  2. 严格匹配redirectUri

    • 生成授权链接的TWITTER_API_REDIRECT_URL、验证时的redirectUri,必须和Twitter开发者后台配置的回调地址完全一致,包括协议(http/https)、域名、路径,甚至末尾的斜杠都不能有差异。
  3. 验证授权码的完整性

    • 检查前端获取的authCode是否被截断或转义错误。部分框架会自动编码路由参数,需确保解码后的code与Twitter返回的原始值完全一致。
  4. 确保客户端实例一致性

    • 生成授权链接和调用loginWithOAuth2必须使用配置完全相同的TwitterApi实例,clientId和clientSecret不能有任何差异。
  5. 检查授权码有效期

    • Twitter授权码仅5分钟有效,若用户生成链接后超过5分钟才完成授权,code会失效,需重新生成授权链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:36