如何为用户侧OAuth实例化Octokit,实现GitHub App代用户操作?
问题根源
你代码的错误在于混淆了authStrategy和auth两个参数的作用:
authStrategy参数需要传入认证策略的构造函数/实例,而非已经生成的用户认证结果对象- 你已经完成OAuth web授权流程拿到了用户token,可选择以下两种方式正确初始化Octokit实例:
方案1:直接传入已获取的用户token(最简便)
该方案无需额外依赖认证策略相关能力,适合大部分常规使用场景:
const { Octokit } = require("@octokit/core"); const octokit = new Octokit({ // 直接传入你拿到的用户OAuth token即可 auth: userAuthenticationFromWebFlow.token });
方案2:使用完整OAuthApp认证策略
如果你需要用到自动刷新token、动态切换认证身份等高级能力,可以按以下规范传入策略和认证参数:
const { Octokit } = require("@octokit/core"); const { createOAuthAppAuth } = require('@octokit/auth-oauth-app'); // 初始化认证策略实例 const auth = createOAuthAppAuth({ clientType: 'oauth-app', clientId: clientGithubID, clientSecret: clientSecretGithub, }); const octokit = new Octokit({ // 传入认证策略实例 authStrategy: auth, // 传入用户认证信息作为策略的入参 auth: { type: 'token', token: userAuthenticationFromWebFlow.token } });
额外注意事项
你当前返回的用户认证结果中scopes为空数组,如果要操作仓库issue,需要在OAuth授权跳转请求中给scope参数追加对应权限:
- 仅操作公开仓库:追加
public_repo权限 - 需要操作公开+私有仓库:追加
repo权限
否则即使token有效,调用接口时也会返回403权限错误。
内容的提问来源于stack exchange,提问作者Sydney C.
相关产品推荐
相关产品推荐

