3

我正在使用 passportjs 库来验证用户进入应用程序。当用户使用passportjs成功认证时,通常会生成一个访问令牌。我正在尝试使用带有此访问令牌的 github API 创建一个分支,但没有取得多大成功,既使用 octokit 包装器,也使用超级代理发布。

我首先尝试以这种方式通过提供用户名和密码来验证 octokit。

let octokit=new Octokit({
  auth:{
    username:username,
    password:password
  }
});

然后我能够创建一个引用/分支而没有太多问题。但是,当我这样做但使用 github SSO 生成的访问令牌时,就像这样

passport.use(new GitHubStrategy({
                clientID: keys.clientId,
                clientSecret: keys.clientSecret,
                callbackURL: "/auth/github/callback"
            },
            async (accessToken, refreshToken, profile, done) => {
                let octokit = new Octokit(auth: `token ${accessToken}`);
                const branchName = 'refs/heads/vue' + Math.random();
                let masterHash = '123x123x1231232';
                octokit.git.createRef({
                    owner: owner,
                    repo: 'gitDemo',
                    ref: branchName,
                    sha: masterHash
                }).then((data) => {
                    console.log('data ', data);
                });

            }

我收到一个 HttpError: Not found 错误。我尝试的另一种方法是使用 superagent 直接发布到端点,将访问代码放在授权标头中。

  const data={
          ref:'refs/heads/FooBranch',
          sha:masterHash
      };
const res2=await request.post('https://api.github.com/repos/SomeOwner/SomeRepo/git/refs')
                            .set('Authorization','token '+accessToken)
                            .send(data);

但是,我仍然收到一个 HttpError :not found 问题。我很困惑我可能做错了什么。谢谢你,任何帮助将不胜感激!

4

1 回答 1

0

我在这里找到了答案

基本上,您不使用 JSON 发送数据,而是使用 FormData。所以帖子应该是这样的(从链接复制):

let data = new FormData()
data.append('client_id', options.client_id)
data.append('client_secret', options.client_secret)
data.append('code', code)
  
fetch(`https://github.com/login/oauth/access_token`, {
  method: 'POST',
  body: data
})

于 2022-02-02T09:07:22.427 回答