Firebase Web端读写数据:如何为get/set请求添加访问令牌
Firebase Web SDK 使用带认证的get/set方法
你之前的错误是把REST API的查询参数写法套到了Firebase Web SDK的ref路径里——SDK的ref()方法接收的是数据库节点的路径(比如requests),不是完整的URL,所以不能加?auth=xxx这种查询参数,这才会触发路径非法的报错。
正确的做法分两种情况:
1. 使用当前已登录的用户自动认证
如果已经通过Firebase Auth完成用户登录(比如signInWithEmailAndPassword、signInWithPopup等方式),Web SDK会自动将当前用户的ID Token附加到所有数据库请求中,不需要手动处理令牌。直接正常调用get()/set()即可:
// 初始化数据库实例 const db = getDatabase(); // 指向目标节点 const requestsRef = ref(db, 'requests'); // 获取数据,自动携带当前用户认证信息 get(requestsRef) .then(snapshot => { if (snapshot.exists()) { console.log('获取到的数据:', snapshot.val()); } else { console.log('该节点无数据'); } }) .catch(err => console.error('获取数据失败:', err)); // 写入数据,自动携带当前用户认证信息 set(requestsRef, { content: '测试数据' }) .then(() => console.log('数据写入成功')) .catch(err => console.error('写入数据失败:', err));
2. 手动指定访问令牌
如果需要使用非当前登录用户的令牌(比如服务端生成的自定义令牌、第三方认证令牌),可以在get()或set()的第二个参数(配置选项)中添加auth字段,传入你的访问令牌:
const accessToken = '你的访问令牌'; const requestsRef = ref(db, 'requests'); // 带自定义令牌获取数据 get(requestsRef, { auth: accessToken }) .then(snapshot => { /* 处理数据 */ }) .catch(err => console.error(err)); // 带自定义令牌写入数据 set(requestsRef, { content: '带令牌写入的数据' }, { auth: accessToken }) .then(() => console.log('写入成功')) .catch(err => console.error(err));
内容的提问来源于stack exchange,提问作者Hssan Bouzlima
相关产品推荐
相关产品推荐

