我想做的是从小型应用程序获取私人回购数据(发行金额)。
由于我不想在请求中公开我的personal github access_token,因此我搜索了另一个我认为是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。
我会尝试完成这些步骤,如果有效,我们会发一个答案。
如果有人知道如何做到这一点,我们仍会欣赏一个明确的答案。
答案 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