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

如何使用Octokit实现OAuth2授权码换取访问令牌?

选择合适的Octokit包实现OAuth2授权码换令牌

推荐包:@octokit/oauth-app

这是Octokit官方专门为OAuth App场景维护的包,已经封装了GitHub OAuth2流程的所有细节,包括授权码换取令牌的核心逻辑,无需手动处理HTTP请求、参数编码和响应解析,比手写fetch代码更可靠、易维护。

替换后的实现代码

先安装依赖:

npm install @octokit/oauth-app

实现getToken函数:

import { Octokit } from "@octokit/oauth-app";
import CONFIG from "./你的配置文件路径";

const oauthApp = new Octokit({
  clientId: CONFIG.GITHUB_OAUTH_CLIENT_ID,
  clientSecret: CONFIG.GITHUB_OAUTH_CLIENT_SECRET,
});

export async function getToken(code: string) {
  try {
    const { data } = await oauthApp.oauth.createToken({
      code,
    });

    return {
      token: {
        access_token: data.access_token,
        scope: data.scope,
        token_type: data.token_type
      },
      // 若需要响应头,可通过请求的response对象获取,示例:
      // headers: response.headers.raw()
    };
  } catch (error) {
    throw new Error(`请求令牌失败: ${error instanceof Error ? error.message : "未知错误"}`);
  }
}

为什么不推荐手写fetch?

你提供的手写fetch代码虽然能实现功能,但需要自行处理很多细节:

  • URL参数的编码与拼接
  • form格式响应体到JSON的转换
  • 错误状态码的精细化处理
  • 后续OAuth流程扩展(如刷新令牌)的适配

而@octokit/oauth-app已经封装了这些逻辑,还会自动兼容GitHub API的版本规范,降低出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:12