使用OAuth和Auth0进行身份验证后获取Github repo数据

时间:2017-08-15 12:22:35

标签: javascript github oauth github-api auth0

我想做的是从小型应用程序获取私人回购数据(发行金额)。

由于我不想在请求中公开我的personal github access_token,因此我搜索了另一个我认为是OAuth的解决方案。

所以我按照thesethese步骤设置了OAuth。

并将社交github设置中Auth0的权限设置为repo(授予repos的读/写访问权限)。

到目前为止一切正常,我可以使用我的github帐户进行身份验证。

但现在我不知道token我必须使用request到github API

以下是我目前的相关代码:

const  handleAuthentication = () => {
  webAuth.parseHash((err, authResult) => {
    if (authResult && authResult.accessToken && authResult.idToken) {
      window.location.hash = '';
      setSession(authResult);

      //here the call to the relevant function
      getIssues('my-element', /*here i should pass the correct token*/); //tryed all tokens i found in authResult

    } else if (err) {
      alert(
        `Error: ${err.error} . Check the console for further details.`
      );
    }
  });
}

const getIssues = (element, token) => {
  const request = new XMLHttpRequest();
  request.open('GET', `https://api.github.com/repos/my_organization/element-${element}/issues?access_token=${token}`, true);

  request.onload = () => {
    if (request.status >= 200 && request.status < 400) {
      const data = JSON.parse(request.responseText);
      //use the data
    } else {
      console.log('error');
    }
  };

  request.onerror = function(e) {
    console.log('connection error: ', e)
  };

  request.send();
}

但这会导致401(未经授权)回复。

我没有经常使用XMLHttpRequests而且我确信,我在这里缺少一些基本的东西。

现在我甚至不确定oAuth是否是达到我想要的正确方法。

非常感谢任何帮助。

修改

与此同时,我做了一些更多的研究,发现了(here),缺少一些步骤来获取正确的用户access_token以连接到github api。

我会尝试完成这些步骤,如果有效,我们会发一个答案。

如果有人知道如何做到这一点,我们仍会欣赏一个明确的答案。

1 个答案:

答案 0 :(得分:1)

要获取回购的问题列表,请调用此API端点:

https://api.github.com/repos/${owner}/${repository}/issues

${owner}是组织名称(不是您的github用户名),而${repo}是您要列出问题的仓库。

作为参考,文档在这里:https://developer.github.com/v3/issues/#list-issues-for-a-repository。但是,就像很多OAuth终结点文档一样,这是秘密的,因此需要花费大量时间进行修改。

有一个实时代码段,您可以查看示例代码,对其进行测试和调整:https://jsfiddle.net/son74dj2/

代码片段说明如下。

它使用https://oauth.io服务及其SDK(以下代码中的OAuth类),而并非必需。但是,OAuth.io使您能够仅使用前端(例如Javascript)来实现OAuth流,因此实时工作代码段可以独立包含在jsfiddle中,可以轻松地共享,调整,测试甚至只是剪切-粘贴到您的网站上。

$('#github-button').on('click', function() {

    // Initialize with your OAuth.io app public key
    OAuth.initialize('YOUR OAUTH.IO PUBLIC KEY');

    // Use popup for oauth
    OAuth.popup('github').then(provider => {

        const repository = 'YOUR REPOSITORY';

        const owner = 'REPOSITORY OWNER';

        provider.get(`/repos/${owner}/${repository}/issues`).then(data => {
            alert('Now you could see list of issues in the console!')
            console.log('Issue list:', data);
        })
    });
})

希望这对帮助您理解和测试终结点很有用,而无需花费大量时间弄清楚文档并修改url和参数。

注意:您需要有权访问该存储库,该存储库所有者需要授予该访问权限。有关截图的详细信息,请参见原始文章:https://tome.oauth.io/providers/github/get-repository-issue-list