0
我在使用身份驗證/安全規則onDisconnect()。remove()時遇到了一些麻煩。基本上我已經是這樣的:Firebase無法驗證/刪除onDisconnect()
首先,我記錄用戶與身份驗證():
var rootRef = new Firebase(FIREBASE_URL + 'sites/' + FIREBASE_ROOT);
rootRef.auth(user.FIREBASE_TOKEN, loginCallback);
然後,我loginCallback註冊以當前用戶爲活躍,並確保用戶參考上斷開刪除:
var activeUsers = $firebase(rootRef.child('pages/' + pageId + '/users')).$asArray();
var rawUser = {
id: user.id,
displayName: user.displayName
};
activeUsers.$add(rawUser).then(function (userRef) {
userRef.onDisconnect().remove();
});
我的火力地堡的這個特殊部分我的安全規則是這樣的:
{
"rules": {
"sites": {
"$siteName": {
"pages": {
"$pageId": {
"users": {
// only users with firebase access can use this
".read": "auth.firebase_user === true"
"$arrayId": {
// users can only write their own data
".write": "auth.firebase_user === true && auth.id === newData.child('id').val()",
".validate": "newData.hasChildren(['id', 'displayName'])"
}
}
}
}
}
}
}
}
使用此安全配置和JS,當用戶斷開他們的引用不會從Firebase中刪除。但是,如果我使用這些安全規則,請改爲:
{
"rules": {
"sites": {
"$siteName": {
"pages": {
"$pageId": {
"users": {
// only users with firebase access can use this
".read": "auth.firebase_user === true",
".write": "true",
"$arrayId": {
// users can only write their own data
//".write": "auth.firebase_user === true && auth.id === newData.child('id').val()",
".validate": "newData.hasChildren(['id', 'displayName'])"
}
}
}
}
}
}
}
}
在斷開連接時正確刪除用戶引用。
我已經嘗試了許多不同的安全規則和JS實現,但他們都基本上結束了這個問題。
有誰知道這裏是否有潛在的認證問題?用戶的身份驗證變量是否及時將其移至Firebase以正確移除用戶?
一些附註:我使用的是AngularFire,這基本上是一個用於查看誰在查看當前頁面的存在實現。
這裏有一個有用的調試工具是在你的onDisconnect()。remove(/ * callback here * /)方法中加入一個回調,以便捕獲安全錯誤。 – Kato 2014-09-12 19:54:01