Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 我可以吗;截取;请求从谷歌云主机提供带有云功能的PWA?_Firebase_Google App Engine_Google Cloud Functions_Google Web Component - Fatal编程技术网

Firebase 我可以吗;截取;请求从谷歌云主机提供带有云功能的PWA?

Firebase 我可以吗;截取;请求从谷歌云主机提供带有云功能的PWA?,firebase,google-app-engine,google-cloud-functions,google-web-component,Firebase,Google App Engine,Google Cloud Functions,Google Web Component,我使用PWA初学者工具包创建网站。我在GoogleAppEngine上托管这些站点,因为它非常容易托管,并提供了现成的PRPL模式 然而,在我的新项目中,我为每个客户机使用一个单独的子域。每个客户端在我的firebase数据库中都有一个不同的租户id。我的问题是:我是否可以使用云函数拦截PWA的http请求,并根据请求的子域从数据库中检索客户端的租户id 在过去,当我使用firebase托管所有内容(函数和托管)时,我能够将其添加到firebase.json中,以将PWA的http请求重定向到一

我使用PWA初学者工具包创建网站。我在GoogleAppEngine上托管这些站点,因为它非常容易托管,并提供了现成的PRPL模式

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

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

在使用Google App Engine托管我的PWA时,如何实现同样的效果?我想一定有办法,但因为我已经没有firebase.json了,我不知道该怎么做


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

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

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

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

const host=req.get('host');
const[tenant,]=host.split('.');
这将解决您的问题,但请记住,您实际上只想从经过身份验证的用户中识别租户id。您可以集成或自定义身份验证解决方案。仅依赖子域是一种有点脆弱的方法,无法实现我认为您正在尝试的目标,并且允许任何客户探测可能提供访问其他租户数据的漏洞确保您仅将子域用于化妆品、白色标签,而不是身份验证策略的一部分。

另见:


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

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

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

      const host=req.get('host');
      const[tenant,]=host.split('.');
      
      这将解决您的问题,但请记住,您实际上只想从经过身份验证的用户中识别租户id。您可以集成或自定义身份验证解决方案。仅依赖子域是一种有点脆弱的方法,无法实现我认为您正在尝试的目标,并且允许任何客户探测可能提供访问其他租户数据的漏洞确保您仅将子域用于化妆品、白色标签,而不是身份验证策略的一部分。

      另见:


      假设子域=租户id正确吗?假设子域=租户id正确吗?
      "rewrites": [
        {
          "source": "**",
          "function": "renderApp"
        }