【问题标题】:Write data to a field in Firebase realtime database without authentication无需身份验证将数据写入 Firebase 实时数据库中的字段
【发布时间】:2019-02-23 11:15:49
【问题描述】:

我正在制作一个用于音乐下载的 React 应用。下载音乐时,我有一个计数器表示它已下载的次数,并且我使用 firebase 事务来更新它已下载的次数:

  static increaseDownload(id) {  
    firebaseDB.ref("musics/" + id).transaction(musique => {
      if (musique) {
        musique.downloaded++;
      }
      return musique;
    });
  }

我知道根据安全规则,用户必须经过身份验证才能写入/读取数据库,但我不想注册和登录用户,我也不想放“.write” :true 对于我数据库中的每个数据。我希望用户能够直接访问该站点并下载。

我的问题是,我怎样才能使“下载”计数器增加,允许未经身份验证的用户只写入该“下载”字段? 我希望未经身份验证的用户只写入“下载”字段、所有其他字段,并且未经身份验证的数据将无法写入。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    [编辑] 您可以只允许访问“下载”的“音乐”节点的子节点,而数据库中的其他信息保持私有且不可访问。 将此添加到您的数据库规则

     
    {
    /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
       "rules": {
          ".read": "false",
            ".write": "false",
        
         "musics":{
         "downloaded":{
           ".read": true,
             ".write": true
           }   
         } 
      }
    }

    【讨论】:

    • 这也将允许用户写入该节点中的“艺术家”、“名称”、“url”字段,我不希望这样。
    • 您可以进一步转到任何节点并为其应用规则。只需写“节点名称”:{“.read”:true,“.write”:true}。 //对于你的情况 "musics": { "downloaded":{ ".read": true, ".write": true } }
    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2018-01-28
    相关资源
    最近更新 更多