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
时的额外津贴。
根据文档,我是这样做的:
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
时的额外津贴。