加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在Firebase托管上运行Ionic应用程序作为PWA

发布时间:2022-12-19 14:03:33 所属栏目:PHP教程 来源:网络
导读: 背景
我们有一个大型的Ionic v1应用程序可以在Android上运行(通过Google Play商店获取),也可以通过"离子服务"在我们的开发机器上运行.
该应用使用Google App Engine(GAE)网站作为后端服务器

背景

我们有一个大型的Ionic v1应用程序可以在Android上运行(通过Google Play商店获取),也可以通过"离子服务"在我们的开发机器上运行.

该应用使用Google App Engine(GAE)网站作为后端服务器.服务器通过COOKIE为每个用户维护会话.我们不会在会话中存储太多数据,但我们需要安全地识别发出每个请求的用户.当应用程序成功运行时,GAE服务器代码会创建一个包含会话ID的COOKIE,并在响应每个HTTP请求时将其发送到Ionic客户端代码.

请注意,Ionic代码不以任何方式访问COOKIE.只需要将相同的COOKIE与每个后续请求一起发送回GAE服务器,以便GAE代码识别用户.

目标

我们希望使用Firebase Hosting提供Ionic代码.事实上我们可以在两种模式中这样做:

一个.将Ionic代码保存在我们的开发机器上,运行"firebase serve",然后在浏览器上转到"localhost:5000"

湾 将Ionic代码部署到Firebase主机并在浏览器上转到"xxxx.firebaseapp.com"

一切正常!呃,除了一件小事,我们几周都试图解决这个问题......

问题

所使用的GAE代码来管理会话连续性,并通过GAE代码生成的HTTP请求的响应发送的COOKIE的,不回来php运行,从火力地堡上运行的应用程序离子的下一个请求.因此,GAE应用程序始终响应,就像用户尚未登录一样.

事实上,进一步的测试表明,在响应发送的HTTP请求的会话COOKIE甚至不会在浏览器设置(所以当然这不是发送回GAE代码与下一个HTTP请求).后端服务器上的GAE代码始终响应,就好像这是会话的第一个HTTP请求一样.

我们消除了什么

问题不在于Ionic不支持COOKIE.我们知道这不是问题,因为该应用程序可以作为Android应用程序和"离子服务"运行良好.在这两种情况下,GAE后端都能够使用COOKIE来维护会话,以将会话ID从一个请求存储到下一个请求.

使用"memcache"而不是GAE会话支持的COOKIE不能解决问题,因为即使你使用memcache,你仍然需要会话ID的COOKIE.如果您愿意,可以使用默认设置,让GAE会话支持使用COOKIE; 在这种情况下,它将对会话ID和任何其他会话数据使用相同的COOKIE.

使用"__session"作为COOKIE的名称无法解决问题.Firebase确实支持使用这样的COOKIE名称,但显然仅在运行带有云功能的Firebase托管的环境中.云功能用于运行后端代码,而不是用户与之交互的客户端代码.我们无法看到将Ionic应用程序作为云功能运行.如果没有云功能,GAE后端设置的"__session"COOKIE显然会被运行应用程序的浏览器客户端以及所有其他COOKIE剥离.

加入"访问控制允许来源/ -Credentials/-方法/ -headers"报头到GAE码生成的响应,并设置crossDomain: truexhrFields: { withCredentials: true }在客户机侧,没有改善的情况.仍然没有在浏览器上设置GAE代码的COOKIE.

任何帮助将非常感谢.

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!