避免 Firebase 可调用函数的 CORS 预检

2024-04-24

我有一个Firebase 可调用云函数 https://firebase.google.com/docs/functions/callable我在浏览器中的 javascript 应用程序中调用它。

由于请求主机是 ...cloudfunctions.net 而不是我的应用程序域,这会导致在真正的 POST 请求之前出现 CORS 预检选项请求。

如果这是一个带 http 触发器的函数 https://firebase.google.com/docs/functions/http-events我可以通过在托管配置中将我的函数指定为重写并将请求发送到托管我的应用程序的同一域来避免预检所需的额外时间。

有什么方法可以使用 Firebase Callable Cloud Functions 避免这种预检吗?也许有一种方法可以通过 Firebase Hosting 代理请求,例如你可以使用http云功能 https://firebase.google.com/docs/hosting/functions


在梳理了 Firebase 文档和 JS SDK 源代码之后,我决定如果不使用/覆盖私有 API,这是不可能的。

我使用的解决方案是复制JS SDK代码 https://github.com/firebase/firebase-js-sdk/blob/master/packages/functions/src/api/service.ts但指定一个 URL通过 Firebase 托管 https://firebase.google.com/docs/hosting/functions所以它与我的应用程序位于同一域中。

相同的云功能、相同的应用程序代码、无 CORS 预检 ????????


  1. 创建普通的 Firebase 可调用云函数
  2. 添加重写firebase.json
{
 ...
 "hosting": {
   ...
   "rewrites": [
      {
        "source": "myFunction",
        "function": "myFunction"
      }
   ]
 }
}
  1. 而不是用firebase.functions().httpsCallable('myFunction')向您自己的新 URL 发送 POST 请求
const token = await firebase.auth().currentUser.getIdToken()
const response = await fetch(
  'https://myapp.web.app/myFunction',
  {
    headers: {
      'Content-Type': 'application/json',
      Authorization: 'Bearer ' + token
    },
    method: 'post',
    body: JSON.stringify({ data })
  }
)

现在 URL 位于您的域内,因此不存在 CORS 问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免 Firebase 可调用函数的 CORS 预检 的相关文章

随机推荐

  • 在c#中查找编译类的源文件

    我正在寻找一组已编译的 net 程序集中特定类的关联源文件 e g MyAsm Namespace Foo gt C Source foo cs MyAsm Namespace Bar gt C Source Code MoreCode C
  • 如何使用 Google Apps 脚本限制文件的复制/下载/打印访问

    有没有人找到一种方法来限制使用谷歌应用程序脚本复制 下载 打印电子表格的访问权限 背景信息 我创建了一个使用 setShareableByEditors false 限制编辑者共享权限的脚本 唯一的问题是编辑者仍然可以轻松地复制电子表格 然
  • Rails 4 link_to 更大的静态图像

    我的文件存储在app assets images subdirectory image png and app assets images subdirectory image full png In my app views home h
  • lseek() 的复杂度是 O(1) 吗?

    我知道我的问题在这里有答案 QFile 寻道性能 https stackoverflow com questions 6171403 qfile seek performance 但我对这个答案并不完全满意 即使在查看了以下实现之后gene
  • 是否可以将jsp预编译到eclipse中?

    标题很简单 我想知道是否有可能直接在eclipse中看到编译好的jsp 生成的servlet 无需部署到任何服务器上 如果您使用 JSP 我建议购买我的Eclipse http www myeclipseide com 因为它可以编译 JS
  • 显示表格单元格不一致。

    嘿 我想知道为什么会发生这种情况 http jsfiddle net dSVGF http jsfiddle net dSVGF 按钮尚未填充容器 锚确实如此 有什么本质上的不同 两个标签之间的风格 div class table a hr
  • 如何在 SQL 中替换 PIVOT 中的 Null 值

    我有以下代码 我试图用零替换使用枢轴时出现的 Null 我执行了以下操作 但它说 ISNULL 附近的语法不正确 我不确定我做错了什么 有什么建议请 select from tempfinaltable pivot ISNULL sum T
  • 无法更新 android studio 3.1:配置冲突:同步项目期间“armeabi-v7a,x86”

    这是我的构建 gradle 应用程序 文件 apply plugin com android application apply plugin io fabric apply plugin checkstyle def versions a
  • Angular2 ngNoForm 还可以进行角度形式验证

    我有一个遗留后端服务器 它将表单数据作为请求参数进行处理 我们将 angular2 放在前端 我想提交 angular2 表单 以便所有字段都作为请求参数 这样就不必更改旧后端 为此 我有
  • 捆绑安装不起作用

    我正在 Windows 上开发 Ruby on Rails 我们的本地网络出现问题 无法访问https www rubygems org https www rubygems org 好像被屏蔽了什么的 但我可以通过访问它http www
  • Ruby on Rails 3:Devise::LdapAdapter.get_ldap_param 未定义方法错误

    我在跑步 红宝石 1 9 3p0 轨道 3 1 1 设计1 4 9 Devise ldap authenticatable 0 4 10 我正在使用 Devise 通过 LDAP 服务器验证我的 Rails 应用程序 我使用用户名而不是电子
  • Is Type 和 Is Type(object, object) 抛出 TypeException

    我试图断言方法调用返回的对象属于以下类型List
  • EC2 t2.medium 可爆发信用“储蓄”计算

    我正在使用 T2 medium 实例 一天的三分之一的时间我都在做密集的统计计算 并计算出剩下的 2 3 的时间我将以每小时 24 小时的速度 赚取 学分 但这并没有发生 这是我这两天的使用情况 这是我的信用账户 直到昨天下午 6 点我已经
  • 在 Ruby 中模拟 int64 溢出

    我是一名资深程序员 但对 Ruby 还很陌生 我正在尝试移植一种名为 CheckRevision 的算法 用于在登录 Battle net 的在线游戏服务之前检查游戏文件的完整性 该算法使用给定的公式对文件进行 哈希 没有无聊的细节 而是不
  • 从 apache Spark 读取/写入 dynamo 数据库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何 Java 库支持从 apache Spark Mesos 读取 写入 dynamo
  • 获取同一 FK 日期差异的前一条记录

    我需要在一小时内插入同一客户的前 1 条记录 如果记录在一小时后插入 则不需要该记录 请参见下表 这只是数千条记录的样本 我正在使用 SQL Server 2005 替代文本 http img651 imageshack us img651
  • 如何在node.js中关闭数据库连接?

    当我关闭数据库连接时node js我收到这个错误 Cannot enqueue Query after invoking quit 这是我的code socket on adminConnect function email connect
  • Java 大型数据库插入

    我有一个数据库 需要在其中插入批量数据 一次大约 500k 条记录 我正在使用 derby 进行测试 发现这么多记录的插入时间约为 10 15 分钟 我正在用 Java 进行批量插入 这次看起来是否很慢 在普通笔记本电脑上工作 有没有办法加
  • 在 SQL Server 的 select 语句中使用带有 TOP 的变量,而不使其动态化 [重复]

    这个问题在这里已经有答案了 declare top int set top 5 select top top from tablename 是否可以 或者对这样的逻辑有什么想法 我不想使用动态查询 是的 在 SQL Server 2005
  • 避免 Firebase 可调用函数的 CORS 预检

    我有一个Firebase 可调用云函数 https firebase google com docs functions callable我在浏览器中的 javascript 应用程序中调用它 由于请求主机是 cloudfunctions