【问题标题】:Can I "intercept" the request to serve a PWA from google cloud hosting with cloud functions?我可以“拦截”来自具有云功能的谷歌云托管服务 PWA 的请求吗?
【发布时间】:2019-11-07 21:28:11
【问题描述】:

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

但是,在我的新项目中,我为每个客户使用了一个单独的子域。每个客户在我的 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 请求中的子域)

【问题讨论】:

  • 假设子域 = 租户 ID 是否正确?

标签: firebase google-app-engine google-cloud-functions google-web-component


【解决方案1】:

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

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

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

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

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

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2019-01-23
    • 2021-10-31
    • 2017-11-14
    • 2019-12-25
    相关资源
    最近更新 更多