发送身份验证承载令牌时出现 Cors 策略错误 - node.js(谷歌云功能)

Posted

技术标签:

【中文标题】发送身份验证承载令牌时出现 Cors 策略错误 - node.js(谷歌云功能)【英文标题】:Cors Policy Error when sending Authentication Bearer token - node.js (Google cloud functions) 【发布时间】:2020-12-28 03:41:30 【问题描述】:

我正在尝试通过 chrome 插件与我的云功能进行通信。如果我不在云功能控制台中启用身份验证,一切正常。但是当我只启用经过身份验证的用户时,我会收到以下错误

对 XMLHttpRequest 的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

我的 Ajax 代码

 return new Promise((resolve, reject) => 

    $.ajax(
      url : API_ENDPOINT+'method4',
      method : 'POST',
      beforeSend: function (xhr) 
          xhr.setRequestHeader('Authorization', 'Bearer '+firebase.auth().currentUser._lat);
      ,
      data : 'id='+id,
      success: function(data, textStatus, xhr) 
          console.log(data);
          resolve(data);
      ,
      error: function(data, textStatus, xhr) 
          reject(data);
          console.log(data)
      ,
  );

);

下面是我部署在云函数上的函数代码

exports.method4 = functions.https.onRequest((request, response) =>

    response.set('Access-Control-Allow-Origin', 'chrome-extension://pcpjkilopmjdhcigjjndndibccdingcb');
    response.set('Access-Control-Allow-Credentials', 'true');

    if (request.method === 'OPTIONS') 

      // Send response to OPTIONS requests
      response.set('Access-Control-Allow-Methods', 'GET, POST');
      response.set('Access-Control-Allow-Headers', 'Authorization');
      response.set('Access-Control-Max-Age', '3600');
      response.status(204).send('');

     else 

      if (request.method !== 'POST') 
        // Return a "method not allowed" error
        return response.status(405).end();
      

      return response.send(request.body['id']);

    
)

过去 2 天我一直被这个问题困扰,不确定是什么导致了这个问题。提前致谢。

【问题讨论】:

【参考方案1】:

您的问题似乎是因为您使用的 OPTIONS 方法。如您所见here,Google 应用脚本网络应用程序支持的唯一 HTTP 方法是 POST 和 GET,目前不支持 OPTIONS 方法。

【讨论】:

以上是关于发送身份验证承载令牌时出现 Cors 策略错误 - node.js(谷歌云功能)的主要内容,如果未能解决你的问题,请参考以下文章

在带有 CORS 的 REST 中使用 Spring 登录时出现问题

从 Spotify 请求访问令牌时出现错误“仅支持有效的不记名身份验证”

使用来自 Angular JS 的 Web API 令牌身份验证时出现错误请求 (400)

发送带有承载令牌授权标头 (flask_restful + flask_jwt_extended) 的 GET 消息时出现“段不足”

使用 CorsFilter 和 spring security 时出现 Cors 错误

Laravel & VueJS CORS 尝试对用户进行身份验证时出现问题,即使使用 Cors 中间件也是如此