You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native+Firebase:登录可读写、未登录仅读的广告页实现问题

解决React Native + Firebase广告页读取数据的问题

Hey there! Let's break down why you're having trouble reading ad data while being able to write it, and fix it step by step.

首先,你的Firebase规则有个明显的小问题

你提到规则里写了".read": "tru..."——这明显是未完成的语法!Firebase会把这种不完整的字符串当成无效规则,直接拒绝所有读取请求,这大概率是你读不到数据的核心原因。

结合你的需求(所有人可读广告,仅登录用户能创建自己的广告),我们需要把规则补全并细化:

{
  "rules": {
    "users": {
      "$uid": {
        "ads": {
          ".read": true,       // 所有人都能读取该用户下的广告内容
          ".write": "$uid === auth.uid"  // 只有广告所属用户能写入/修改
        }
      }
    }
  }
}

这个规则既满足了"所有人可读"的需求,又保证了数据写入的安全性——只有登录用户能操作自己uid下的ads节点。

然后,读取路径要匹配你的数据结构

你写入广告的路径是/users/${currentUser.uid}/ads,所以读取时要根据需求选择对应的路径:

场景1:读取当前登录用户自己的广告

如果是要展示用户自己发布的广告,直接用和写入一致的路径即可:

import firebase from 'firebase/app';
import 'firebase/database';
import 'firebase/auth';

// 确保先获取当前用户
const currentUser = firebase.auth().currentUser;
if (currentUser) {
  // 监听当前用户的广告数据变化
  firebase.database().ref(`/users/${currentUser.uid}/ads`).on('value', (snapshot) => {
    const userAds = snapshot.val();
    if (userAds) {
      // 把对象转成数组方便渲染(假设你用对象存储广告)
      const adsList = Object.values(userAds);
      console.log('我的广告:', adsList);
      // 在这里更新React Native的state来渲染广告列表
    } else {
      console.log('还没有发布任何广告');
    }
  });
}

场景2:读取所有用户的广告(给所有访客看)

如果要展示平台上所有用户的广告,需要读取根节点/users,然后遍历每个用户的ads节点:

firebase.database().ref('/users').on('value', (snapshot) => {
  const allAds = [];
  snapshot.forEach(userSnapshot => {
    // 取出每个用户的广告数据
    const userAds = userSnapshot.child('ads').val();
    if (userAds) {
      // 把每个广告加入总列表,也可以保留发布者的uid信息
      Object.values(userAds).forEach(ad => {
        allAds.push({ ...ad, publisherUid: userSnapshot.key });
      });
    }
  });
  console.log('所有广告:', allAds);
  // 渲染所有广告的列表
});

几个额外的检查点

  • 规则修改后,一定要在Firebase控制台点击发布按钮,规则生效可能需要1-2分钟
  • 可以用Firebase控制台的规则模拟器测试权限:选择"读取"操作,输入对应的路径,分别模拟"未登录用户"和"登录用户",验证是否能正常访问
  • 确保你的React Native项目已经正确初始化了Firebase(包括Auth和Database模块)

内容的提问来源于stack exchange,提问作者Japaleno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:01:32