Sheets Discovery API因预检请求失败

时间:2016-10-22 04:57:22

标签: angularjs cors google-sheets-api

我正在使用Google Discovery API在我的AngularJS项目中支持Google OAuth。我使用this URL,然后使用相应的discoveryRestUrl来获取API范围。

一切正常,直到我使用Google表格discoveryRestUrl https://sheets.googleapis.com/$discovery/rest?version=v4尝试上述内容。

我使用Angular的$http服务来触发GET请求获取API特定信息。在我的浏览器控制台中,我看到生成了两个请求 - 一个是OPTIONS方法(预检),第二个是GET方法(它获取JSON数据)。

对于表格,我在浏览器的控制台中收到预检请求时会出现以下错误。

XMLHttpRequest cannot load https://sheets.googleapis.com/$discovery/rest?version=v4. Response to preflight request doesn't pass access control check: Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials. Origin 'http://localhost:3000' is therefore not allowed access.

我没有看到其他API的问题。我尝试使用我的浏览器和cURL触发相同的URL,但它们工作正常。

请帮忙!

1 个答案:

答案 0 :(得分:0)

有趣的是,我发现在一些API发现资源的请求中包含令牌头会导致服务器验证范围,如果不包括范围,则无法为请求提供服务。当您尝试使用发现规范来确定所需范围时,这可能会令人沮丧; ^)

解决方案是,如果您正在执行OAUTH请求,则包括一个必需的范围,或者简单地发出不带AUTH标头的请求,该标头对大多数API都适用,除了少数受限制且不可用于的API。仍然是普通消费。