【问题标题】:Firebase Realtime Database Presence Not WorkingFirebase 实时数据库状态不工作
【发布时间】:2021-05-20 23:37:21
【问题描述】:

根据文档,我正在这样做:

    var currentUser;
    firebase.auth().onAuthStateChanged(function(user) {
      if (user && user.emailVerified) {
        currentUser = user;
        setPresence();
      }
    });
    function setPresence() {
      var myConnectionsRef = firebase.database().ref('users/' + currentUser.uid + '/connections');
      var connectedRef = firebase.database().ref('.info/connected');
      connectedRef.on('value', function(snap) {
        if (snap.val() === true) {
          var con = myConnectionsRef.push();
          con.onDisconnect().remove();
          con.set("profile");
        }
      });
    }

我在每个页面上都这样做,但它似乎不适用于个人资料页面。这是我在数据库中看到的:

这不是一次性的。几乎所有用户都有类似的东西。这可能是什么原因?为什么 onDisconnect 不会触发?

如果需要,这里是网页:magicconnects.com/profile。

非常感谢您的帮助!

编辑:添加安全规则:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}

【问题讨论】:

  • 1) onDisconnect 处理程序执行之前可能需要几分钟,因为它通常依赖于服务器来检测客户端已消失。 2) 您是否有阻止remove() 执行的安全规则?
  • 将它们添加到帖子中 - 它们似乎不是问题。 90% 的用户仍然具有与图片中相似的状态。我只是按照文档。关于如何调试它的任何提示?可以肯定的是,这是我的定义,对吧?或者可能是 Firebase 问题?
  • 我记得不久前在onDisconnect 处理程序中看到过身份验证问题。您是否可以尝试允许未经身份验证的写入或(如果这对您的数据库太危险)至少未经身份验证的数据删除?如果可行,至少我们知道是什么导致了问题。
  • “读取,如果为真则写入”版本的安全规则有效,但 obv 这并不理想。你会建议我做什么?另外,如何允许未经身份验证的数据删除?我找不到像 .delete 这样的东西。谢谢!

标签: javascript firebase firebase-realtime-database user-presence


【解决方案1】:

问题似乎是在onDisconnect 代码运行时令牌可能已过期。因此,您需要允许未经身份验证的删除相关数据。

我能想到的最安全的方法是在单个连接节点(以-M... 开头的节点)的级别上执行此操作,这样就只能通过知道密钥来删除节点。

看起来像这样:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "auth != null && auth.uid == $uid"
        "$pushid": {
          ".write": "!newData.exists()"
        }
      }
    }
  }
}

由于规则是 OR'ed 在一起的,当有人知道 $pushid 时,".write": "!newData.exists()" 是一个额外的余量。

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2021-03-10
    • 2017-07-20
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多