2014-01-25 91 views
2

我是新來的火力地堡,真正與安全規則掙扎。火力地堡安全規則

我想存儲的數據只能由該用戶進行訪問,但匿名用戶會話,只要我收緊的安全規則,我得到拒絕的權限,並不能明白爲什麼。

我的結構是:

/userSessions/$ USER/USER_ID

的應用推送至用戶會話,並寫入由匿名登錄返回的USER_ID。

我有以下安全規則:

{ 
    "rules": { 
    ".read": true, 
    "userSessions": { 
     "$user": { 
     ".write": "newData.child('user_id').val() == auth.id", 
     "user_id": { 
      ".validate": "newData.isString()" 
     } 
     } 
    } 
    } 
} 

我知道我在做一些愚蠢的,但不知道如何使用安全模擬器或者所以不知道怎麼走有關解決這個

任何幫助,不勝感激

編輯 - 努力創造匿名認證後下userSessions一個新的條目時,會發生 問題。

代碼:

var userSessionsRef = new Firebase('https://xxxxxx.firebaseio.com/userSessions'); 
var userSession; 
var auth = new FirebaseSimpleLogin(userSessionsRef, function(error,user) { 
    if (error) { 
     console.log(error); 
    } else if (user) { 
     userSessionsRef.child(user.id).set({ 
      user_id: user.id, 
      provider: user.provider, 
      created: Firebase.ServerValue.TIMESTAMP 
      }); 
    userSession = new Firebase('https://xxxxx.firebaseio.com/userSessions/'+user.id); 
    userSession.onDisconnect().remove(); 
} 
+0

當您獲取權限被拒絕時,您想做什麼? –

+0

下創建userSessions一個新的$用戶 - 我會更新的問題 –

+0

嗨@JonReeves!當你在模擬器中試用時,你會得到什麼?另外,它似乎很可能是user.id是一個數字(我假設你使用Twitter或Facebook?他們都返回數字ID)。另外,哪些數據正在設置?你可以登錄用戶對象,並在這裏發佈?您可以爲我們提供更多的數據,使您能夠輕鬆快速地進行故障排除。 – Kato

回答

2

集()您所提供的操作運行很好;沒有錯誤;在這裏必須有另一個問題,你沒有捕獲你的repro(你是否在Forge中啓用匿名身份驗證?)。這裏有一個小提琴在您的安全規則上運行,複製線路換行(剛剛向下移動一個子路徑):http://jsfiddle.net/katowulf/wxn5J/

在相關說明中,您當前的安全規則將不允許userSession.onDisconnect().remove();操作,因爲記錄只能是如果newData()包含一個user_id值(即它不能爲null),則寫入。構建這些安全規則的更好方法如下:

{ 
    "rules": { 
    ".read": true, 
    "userSessions": { 
     "$user": { 
     ".write": "$user === auth.id", // delete allowed 
     "user_id": { 
      ".validate": "newData.isString() && newData.val() === $user" 
     } 
     } 
    } 
    } 
} 
+0

謝謝。試過這些規則,但仍然被拒絕。在Forge中肯定有啓用匿名身份驗證。不知道我在這裏做錯了什麼。從好的方面來說,模擬器現在正在工作,但我不知道如何使用它來測試匿名認證,因爲它不給我用戶ID,所以我沒有辦法用它來測試寫入? –

+0

使用你的代碼以及我的firebase作品 - 肯定在某處出了問題。非常感謝您的幫助 –