繁体   English   中英

Firebase 实时数据库状态不工作

[英]Firebase Realtime Database Presence Not Working

从文档中,我正在这样做:

    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"
      }
    }
  }
}

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

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

看起来像这样:

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

由于规则是“或”运算在一起的,因此".write": ".newData.exists()"是当有人知道$pushid时的额外津贴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM