【问题标题】:Sheets Discovery API fails for preflight request预检请求的表格发现 API 失败
【发布时间】:2017-03-04 11:08:52
【问题描述】:

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

一切正常,直到我使用 Google 表格的 discoveryRestUrlhttps://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,但它们工作正常。

请帮忙!

【问题讨论】:

    标签: angularjs cors google-sheets-api


    【解决方案1】:

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

    解决方案是在您执行 OAUTH 请求时包含所需的范围,或者只是在没有 AUTH 标头的情况下发出请求,这应该适用于大多数 API,除了一小部分受限制且不可用于的 API反正一般消费。

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2016-06-01
      • 2020-08-06
      • 2013-10-24
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2018-05-28
      • 2021-08-25
      相关资源
      最近更新 更多