目前我正在尝试构建一个 Github Pages 站点,该站点将充当用户存储库中数据的编辑器。当用户最初使用该网站时,他们会被引导安装 Github 应用程序,当发生这种情况时,他们会被重定向回该网站,代码位于 url 中。然后,该站点将此代码发送到带有 Gatekeeper 的服务器,令牌被返回,并存储在用户的 cookie 中。根据Github:
默认情况下,用户访问令牌将在 8 小时后过期。您可以使用刷新令牌重新生成用户访问令牌。有关更多信息,请参阅“刷新用户访问令牌”。
我同意令牌每 8 小时过期一次,并且我理解您应该使用刷新令牌来刷新它,但问题是我不明白如果应用程序丢失这些令牌会发生什么。如果用户转移到其他浏览器,是否需要卸载并重新安装应用程序?
我的猜测是,也许您可以通过 Oauth 流程发送用户,他们将获得应用程序的刷新令牌,但这会带来您无法判断用户是否已安装该应用程序的问题。因此,执行此操作的唯一方法似乎是通过 Oauth 流程发送用户,使用其中的令牌来检查应用程序是否已安装,然后如果未通过应用程序安装过程发送用户,这似乎可笑。
所以,我的问题是,如果用户身份验证令牌不可用于已安装的应用程序,那么应用程序获取用户身份验证令牌的预期方式是什么?
如果有人能找到任何实现此功能的项目作为示例,那就太好了。
此外,我让用户安装应用程序而不是仅进行身份验证的原因是,这似乎是应用程序访问其私有存储库的唯一方式。
编辑:我在here和
找到了此信息我尝试过这两个 API,但都没有返回私有存储库:
https://api.github.com/users/USERNAME/repos
const apiUrl = 'https://api.github.com/user/repos';
const params = {type: 'private'};
fetch(`${apiUrl}?${new URLSearchParams(params)}`, {
method: 'GET',
headers: {
'Authorization': `token ${accessToken}`,
'Accept': 'application/json',
}
})
.then(response => response.json())
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Error:', error);
});
https://api.github.com/search/repositories?q=user:用户名
const apiUrl = `https://api.github.com/search/repositories?q=user:${username}+is:private`;
fetch(apiUrl, {
method: 'GET',
headers: {
'Authorization': `token ${accessToken}`,
'Accept': 'application/json',
}
})
.then(response => response.json())
.then(data => {
console.log(data.items);
})
.catch(error => {
console.error('Error:', error);
});
});
我没有使用经过身份验证或安装的 GithubApp,而是使用了 OauthApp,它可以访问私有存储库并解决整个问题。