Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于github oauth的cors问题_Javascript_Github_Xmlhttprequest_Cors - Fatal编程技术网

Javascript 关于github oauth的cors问题

Javascript 关于github oauth的cors问题,javascript,github,xmlhttprequest,cors,Javascript,Github,Xmlhttprequest,Cors,来自“超级代理”的导入请求; const self=这个; 要求 .post('https://github.com/login/oauth/access_token') .set('内容类型','多部分/表单数据') .查询({ 客户id:客户id, 客户机密:客户机密, 回调:'http://127.0.0.1:3000/callback', 代码, 国家,, }) .end((错误、恢复)=>{ const token=res.body.access_token; console.log(

来自“超级代理”的导入请求;
const self=这个;
要求
.post('https://github.com/login/oauth/access_token')
.set('内容类型','多部分/表单数据')
.查询({
客户id:客户id,
客户机密:客户机密,
回调:'http://127.0.0.1:3000/callback',
代码,
国家,,
})
.end((错误、恢复)=>{
const token=res.body.access_token;
console.log(令牌);
self.setToken(令牌);
});虽然所有这些都是通过发送正确的响应头来实现的,但是
https://github.com/login/oauth/access_token
用于创建OAuth访问令牌的端点不支持来自Web应用程序的CORS请求

这种情况下非常具体的解决方法是使用:

网守:使客户端应用程序能够与GitHub一起运行OAuth。

由于一些与安全相关的限制,Github阻止您在仅客户端应用程序上实现OAuthWeb应用程序流

这真是个糟糕透顶的家伙。所以我们建立了守门人,这是你需要的缺失部分,以使其工作

一般的解决方法是:使用开放的反向代理,如


另请参见。

用户应该如何关注向不受信任的开放式反向代理提供其客户端id和密码?@osowskit显然他们应该关注。使用风险自负。如果代理的所有者希望从请求中记录凭据,则可以。这就是为什么在他们自己的站点上运行Gatekeeper或其他类似的代理当然更好。(为什么我说开放反向代理是一个更为“通用的解决方案”,用于解决不选择接收跨源XHR/Fetch请求的站点的CORS限制。)或者使用类似AWS API网关的东西来创建您自己的授权调用,并为您的客户保密
var req = new XMLHttpRequest();
req.open('POST',
  'https://cors-anywhere.herokuapp.com/https://github.com/login/oauth/access_token',
  true);
req.setRequestHeader('Accept', 'application/json');
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send('code=' + encodeURIComponent(location.query.code) +
    '&client_id=foo' +
    '&client_secret=bar');
...