以json

时间:2016-05-11 12:42:23

标签: javascript post github oauth2

在我开始之前,我想对我的英语说抱歉,这不是我的母语。

我正在尝试为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中找不到任何有用的信息,所以我必须在这里注册。谢谢你的帮助。

3 个答案:

答案 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