Firebase实时数据库REST API:如何将?shallow=true与授权Token混合使用?
Firebase实时数据库shallow查询加授权Token的解决办法

问题背景
我是MIT App Inventor开发新手,非计算机专业。用Firebase实时数据库时,想通过?shallow=true获取所有表层节点,但因为权限规则要求必须在URL里加授权Token,而shallow=true不能和其他查询参数混用,导致报错,求易懂的解决方法。
可行解决方法
临时应急方案:短时间调整权限规则
如果你只是需要一次性拿到表层节点,可以临时把数据库的读取权限改成公开(在Firebase控制台的数据库规则里设".read": true),然后用不带Token的链接加?shallow=true请求获取节点列表,拿到后立刻把规则改回原来的限制。注意绝对不能长期开公开权限,防止数据泄露。长期稳定方案:用Firebase云函数中转
这是推荐的正规做法,步骤简单易懂:- 去Firebase控制台开启「云函数」功能,用Node.js写一个简单的函数(复制粘贴即可),让它帮你调用
shallow=true查询(后台的Admin SDK不受前端规则限制,也不用在URL加Token),同时可以验证用户身份确保合法访问。
示例代码:const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.getTopNodes = functions.https.onCall(async (data, context) => { // 验证用户是否登录,符合权限要求 if (!context.auth) { throw new functions.https.HttpsError("unauthenticated", "请先登录"); } // 执行shallow查询获取表层节点 const dbRef = admin.database().ref(); const snapshot = await dbRef.once("value", null, { shallow: true }); // 返回节点名称列表 return Object.keys(snapshot.val()); }); - 部署这个云函数后,在MIT App Inventor里用云函数调用组件触发它,就能直接拿到表层节点列表,完全符合权限规则要求。
- 去Firebase控制台开启「云函数」功能,用Node.js写一个简单的函数(复制粘贴即可),让它帮你调用
小数据量备选方案:前端逐个验证
如果你的表层节点数量很少,或者能提前知道可能的节点名称,可以在前端带着授权Token逐个尝试读取节点,判断哪些节点实际存在。但这个方法效率低,只适合节点少的场景。
内容的提问来源于stack exchange,提问作者Domenico Melisi
相关产品推荐
相关产品推荐

