如何使用登录用户的 GitHub API 在 GitHub 上发布问题存根,而无需验证密钥?

Kon*_*ner 8 javascript api post github github-api

我的 Web 应用程序的用户应该将错误报告作为 GitHub 问题提供,并带有预先生成的标题和正文。

这对于小型机构使用 GET 非常好:

const title = getLastErrorTitle();
const body = getAllTheLogMessages();
window.open(`https://github.com/theuser/therepo/issues/new?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`);
Run Code Online (Sandbox Code Playgroud)

如果用户已登录,GitHub 会向用户显示一个新问题,标题和正文已填写,完美。如果没有,GitHub 会提示用户登录,下次再运行。

但是,如果正文太大,则 GET 请求会因为 URL 变得太长而失败。

在查阅手册后,我尝试对 POST 做同样的事情,但我从 GitHub 获得了一个 404 并带有以下测试请求(为简洁起见是 jQuery):

 $.ajax({
  type: "POST",
  url: "https://api.github.com/repos/theuser/therepo/issues",
  data: data = {title: "Test", body: "Test Body"},
});
Run Code Online (Sandbox Code Playgroud)

我的怀疑是,GitHub API 的设计并没有考虑到我的用例,但是 POST 总是需要身份验证并一次性创建完整的问题,而不会让用户像使用 GET 那样事先更改它。

如何将 GET 方法的功能转移到 POST 方法?我只希望 GitHub 向当前登录浏览器的用户显示一个预填充的问题,而不需要令牌。

Cam*_*lle 2

你不能。否则,这将是一个重大的 CSRF 漏洞。

但是,您可以使用 OAuth 身份验证,这将允许您的应用程序使用某些功能:https ://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/

<a>或者简单地,使用以下模式将用户重定向到带有一些自动内容的新问题页面(例如,带有简单的 HTML 链接):

https://github.com/{theUser}/{theRepo}/issues/new?body={theContentYouWhant}&title={theTitleYouWhant}
Run Code Online (Sandbox Code Playgroud)

示例: https: //github.com/CristalTeam/php-api-wrapper/issues/new?body =Hi,%20this%20is%20the%20body%20you%20want&title=Hello,%20this%20is%20a%20prefill% 20期