1

我使用 PWA 入门套件https://pwa-starter-kit.polymer-project.org/创建网站。我在 Google App Engine 上托管网站,因为它很容易托管并提供开箱即用的 PRPL 模式https://pwa-starter-kit.polymer-project.org/building-and-deploying#building-为-prpl-服务器

但是,在我的新项目中,我为每个客户使用了一个单独的子域。每个客户在我的 firebase 数据库中都有不同的租户 ID。我的问题是:我是否可以使用云功能拦截 PWA 的 http 请求,并根据请求的子域从我的数据库中检索客户端的租户 ID?

过去,当我使用 firebase(函数和托管)托管所有内容时,我能够将其添加到 firebase.json 以将 PWA 的 http 请求重定向到我称为“renderApp”的 firebase 函数

"rewrites": [
  {
    "source": "**",
    "function": "renderApp"
  }

如何在使用 Google App Engine 托管我的 PWA 时达到同样的效果?我认为有某种方式,但由于我没有 firebase.json 了,我不知道该怎么做。

简而言之; 当我将租户 ID 发送给客户端时,我希望将租户 ID 烘焙到我的 PWA 中,但我必须首先查找位于我的 firebase 数据库中的租户 ID(基于 http 请求中的子域)

4

1 回答 1

0

免责声明:我有一个答案给你,但在这个答案的末尾还有一个警告。

首先,确保您已*.example.com在 App Engine 中设置为自定义子域,并*.example.com已配置为CNAME与您的 DNS 提供商一起使用。这会将所有请求路由TENANT.example.com到您的应用程序。(我假设子域代表您的租户 ID)。

在您的应用程序中,您可以从标头中提取子域Host。在 nodejs 中,这看起来像:

const host = req.get('Host');
const [ tenant, ] = host.split('.');

这将解决您的问题,但请记住,您真的只想从经过身份验证的用户中辨别出tenant_id。您可以集成Identity-Aware Proxy或自定义身份验证解决方案。仅依靠子域是一种有点脆弱的方法来实现我认为您正在尝试做的事情,并允许任何客户端探测可能提供对其他租户数据的访问的缺陷。确保您仅将子域用于装饰、白标目的,而不是作为身份验证策略的一部分。

也可以看看:

于 2019-11-09T03:46:04.987 回答