首页 > 解决方案 > 前端 Firebase 请求在通过公司代理加载的网站上被阻止

问题描述

我们遇到了企业客户的问题,他们无法通过 Firebase 进行身份验证并使用 Firestore 进行读/写,因为这些对 Google API 的请求是在我们的 Next.js 实例的前端编写的。

客户在他们的 JS 控制台中看到的错误:

Failed to load resource: net::ERR_TUNNEL_CONNECTION_FAILED

我想这是公司代理背后的严格同源策略,我们应该将所有 firebase/firestore 请求移到后端,在 Next.js 中的 /api 后面。

我们不能要求每个企业客户将*.googleapis.com跨域请求列入白名单。

我对下一步的假设是否正确?如果是这样,当前在我们前端编写的大量 Firestore 查询将需要移动到后端,即:

await db
  .collection('users')
  .doc(user.email)
  .collection('starred')
  .doc(user.id)
  .set({ set: true });

是否已经有一个 API 库、云同源策略或云函数来简化这一点,然后为 Firestore 数据库查询编写一个全新的 API?

标签: firebasegoogle-cloud-firestorenext.jssame-origin-policyvercel

解决方案


听起来你的手被束缚了,你必须遵守你目前拥有的东西,也许你可以尝试一些棘手的代理技巧,但限制永远是公司的,遇到其他墙壁可能会很麻烦而且浪费时间,所以考虑如果开发不是太远,将查询移动到后端并不是一个糟糕的主意。

云功能基于 HTTP 请求工作,您可能会遇到同样的问题,因为来自前端的请求也可能需要身份验证以确保安全。

您始终可以考虑使用 Firebase Admin SDK 从后端处理相同的逻辑。Firebase Admin SDK 目前支持最新版本的 Node.js-Java-Python-Go-C#。如果您要将查询移植到 Node.js,那么您已经完成了大部分查询。

您可以通过查看文档了解如何设置 SDK


推荐阅读