如何获取Firebase Hosting历史版本并解决API调用403认证问题
方案一:部署前预定义版本号(最推荐)
这个方案可以彻底解决旧页面版本显示错误的问题,操作也最简单:
- 你要的类似
e925c5的版本号可以直接取Git提交的短哈希,部署前执行脚本把这个哈希写入你的前端代码的固定位置,比如写入全局变量window.APP_VERSION = 'e925c5',或者直接插入到页面展示版本的DOM节点里 - 你也可以通过Firebase CLI的部署参数自定义版本标识,部署时加
--message参数,比如firebase deploy --message "e925c5",这个标识会出现在Firebase控制台的部署历史里 - 因为版本号是直接打包到对应版本的静态资源里的,每个旧版本的页面自带的就是自己对应的版本号,完全不会出现旧页面展示最新版本号的问题
方案二:正确调用Firebase Hosting Rest API获取历史版本
你之前返回403是身份验证环节的用法错误,修复方式如下:
- 首先你调用的
getGlobalDefaultAccount.getAccessToken()是异步方法,你没有等待它返回有效令牌就直接传入了requireAuth,导致传入的是pending状态的Promise而非有效令牌 - 使用的权限scope不对,不需要
cloud-platform这么大的权限,换成https://www.googleapis.com/auth/firebasehosting即可 - 更稳定的用法是直接用Google官方的认证库,而非调用firebase-tools的内部私有方法,内部方法随时可能在版本更新后失效
如果你只需要本地跑脚本拉取版本列表,可以直接用gcloud CLI生成有效令牌后请求接口:
# 先登录gcloud gcloud auth application-default login # 生成令牌 TOKEN=$(gcloud auth application-default print-access-token) # 请求版本列表接口 curl -H "Authorization: Bearer $TOKEN" "https://firebasehosting.googleapis.com/v1beta1/sites/sarafe-testing/releases"
补充说明
如果走API拉取的方案,要解决旧页面版本匹配问题,可以在页面加载时读取当前静态资源的ETag或者Last-Modified响应头,和接口返回的版本历史中的对应字段做匹配,就能拿到当前页面所属的版本号。
内容的提问来源于stack exchange,提问作者Sae
相关产品推荐
相关产品推荐

