如何在GitHub上使用已登录的用户,在没有认证密钥的情况下,使用GitHub API在GitHub上POST一个issue stub?

问题描述 投票:1回答:1

我的web应用的用户需要以GitHub问题的形式提供bug报告,并预先生成标题和正文。

这在使用GET小体时完全可以正常工作。

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

如果用户已经登录,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"},
});

我的怀疑是,GitHub API的设计并没有考虑到我的用例,但POST总是需要认证,并且一次性就能创建完整的问题,而不像GET那样可以让用户事先更改。

如何将GET方法的功能转移到POST方法上?我只是想让GitHub向当前在浏览器内登录的用户提供一个预先填充的问题,而不需要标记。

javascript api github post
1个回答
2
投票

你不能这样做。否则,这将是一个主要的CSRF漏洞。

然而,你可以使用OAuth认证,这将允许你的应用程序使用一些功能。https:/developer.github.comappsbuilding-oauth-appsauthorizing-oauth-apps。

或者简单地将用户重定向到一个新的问题页面(例如用一个简单的HTML链接 <a>)与一些自动内容,使用这种模式。

https://github.com/{theUser}/{theRepo}/issues/new?body={theContentYouWhant}&title={theTitleYouWhant}

例子。https:/github.comCristalTeamphp-api-wrapperissuesnew?body=Hi,%20this%20is%20the%20body%20you%20want&title=Hello,%20this%20is%20a%20prefill%20issue。


-1
投票

我在这里建议的是生成一个 personal_auth_token 在gihub的头文件中传递这个令牌,并将此令牌传递到 Authorization 字段。

要生成personal_auth_token,请登录到github.com,进入到 设置 -> 开发者设置 -> 个人访问令牌 并生成一个。

在Auhtorization下的headers中传递这个token。token. 所以在你的AJAX请求中,它可能看起来像这样。

$.ajax({
    url: *yourUrl*
    ...
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', *token*));
    },
});

有一点需要注意的是,每一个开发人员 POSTing到repo的用户需要生成他们的访问令牌,由于明显的安全漏洞,你不能将这个令牌推送到公共Github仓库。如果你不小心这样做了,这个令牌会被立即撤销,你将需要创建一个新的令牌。

© www.soinside.com 2019 - 2024. All rights reserved.