javascript之客户端服务器从自己的域返回 json 时没有 'Access-Control-Allow-Origin'
我有一个在前端使用 Angular/js 并在后端使用 PHP 的应用程序。两者都使用相同的域 (www.foo.bar)。
我已经在我的后端实现了 linkedin 身份验证。所以在前端我做了类似的事情
$http({
method: 'POST',
url: 'http://foo.bar/api/authenticate',
headers: { 'Content-Type' : 'application/x-www-form-urlencoded' }
}).success(function(outcome){
console.log("success");
}).error(function(outcome){
console.log('error');
});
然后,我的服务器使用 linkedin 对用户进行身份验证(这包括一些重定向),并最终返回一个包含从 linkedin 检索到的基本个人资料信息的 json。
如果我直接访问我的 api:foo.bar/api/authenticate,它就像一个魅力,我可以看到 json。如果我在前端使用 ajax 请求调用它,我会得到
XMLHttpRequest cannot load https://www.linkedin.com/uas/oauth2/authorization?blablabla No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://foo.bar' is therefore not allowed access.
异常。
有什么想法吗?
编辑: 在查看了可能的解决方案之后,我缩小了问题范围并或多或少地解决了它。 问题不在于我无法从自己的 api 访问 json 文件,问题在于我在 ajax 调用中进行了重定向。
public function authorize(){
return Redirect::away("https://www.linkedin.com/uas/oauth2/authorization?response_type=linkedinApiData&redirect_uri=http://foo.bar/api/members/authenticated");
}
我在想,如果这重定向到另一个 api 调用,完成授权并返回一个 json 对象,那就没问题了,但后来我得到了前面提到的异常(我猜来自 linkedin)。
我有一个临时解决方案,只需使用 http://foo.bar/api/..>,它处理身份验证请求,进行重定向,最后重定向到我必须去的页面,并将结果 json 存储在 session 中。 当下一页加载时,我要求后端返回此 session 的内容。
是否可以通过身份验证(包含 linkedin 身份验证所需的重定向)进行发布,然后从我自己的服务器返回 json(可以正常工作并且不存在访问 header 问题?
请您参考如下方法:
域名只是源站的一部分。整个起源:
- 方案
- 完整的主机名
- 端口
…必须匹配。
foo.bar 与 www.foo.bar 不同。
要么与您使用的主机名保持一致(一般来说,将所有请求从 example.com 重定向到 www.example.com 或反之亦然是个好主意)或实现 circumvent the same origin policy 的方法之一.
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



