在我开始之前,我想对我的英语说抱歉,这不是我的母语。
我正在尝试为GitHub授权设置OAuth2。
我坚持这一步,我应该向github发送POST请求并接收访问令牌。问题是,当我发送POST请求时,我的浏览器会自动下载带有访问令牌的文件。由于我无法使用javascript打开此文件,因此我尝试将json作为响应。
在documentation中写道我可以更改接受标头并接收json,但我无法写出正确的POST请求。
我已经尝试过很多东西,比如:
$.ajax({
method: "POST",
url: "https://github.com/login/oauth/access_token",
dataType: "application/json"
});
或
$.ajax({
url: 'https://github.com/login/oauth/access_token',
headers: {
Accept : "application/json",
}
data: "data",
success : function(response) {
console.log(response);
} })
等
但是我收到了这个错误:
XMLHttpRequest无法加载github.com/login/oauth/access_token。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://braga.fedyunin.com.ua”访问。响应的HTTP状态代码为404.
在google中找不到任何有用的信息,所以我必须在这里注册。谢谢你的帮助。
答案 0 :(得分:1)
在以下部分中阅读https://developer.github.com/v3/:跨源资源共享
答案 1 :(得分:1)
我尝试了同样的事情,但由于GitHub API的响应中缺少Access-Control-Allow-Origin标头而失败了。我联系了GitHub支持,发现了什么问题。
它不起作用,因为您尝试使用GitHub API不支持的Web应用程序中的OAuth。当您以这种方式进行身份验证时,您的client_id和client_secret必须位于某个网页中,并随POST请求一起发送。可以使用Firebug或类似工具查看整个请求,包括您的client_secret。因为公开client_secret是个坏主意,GitHub API不会返回Access-Control-Allow-Origin标头,从而阻止您检索令牌。
您必须从服务器端发出POST并以此方式获取令牌。当你这样做时,client_secret就在你的服务器上,而不是在人们的浏览器中。
答案 2 :(得分:0)
从您的站点到github.com的Ajax请求失败,因为浏览器遵循xhr请求的相同原始策略。这意味着只能对同一来源的资源进行xhr请求。 为了允许跨源请求,服务器需要Whitlelist可以访问特定资源的域。
在您的情况下,要执行此操作,您需要在github帐户中将您的网站注册为应用程序,方法是在此输入详细信息:https://github.com/settings/applications/new