2017-03-01 133 views
1

對於下面的Firebase規則集。Firebase規則導致奇怪的行爲

"users": { 

    //".read": "(auth != null) && (auth.uid === newData.child('id').val())", 

    // A list of users and their associated metadata, which can be updated by the single user or a moderator. 
    "$userId": { 
    ".write": "(auth != null) && (auth.uid === $userId)", 
    ".read": "(auth != null) && (auth.uid === $userId)", 
    ".validate": "($userId === newData.child('id').val())", 
    "invites": { 
     // A list of chat invitations from other users, append-only by anyone. 
     "$inviteId": { 
     // Allow the user who created the invitation to read the status of the invitation. 
     ".read": "(auth != null) && (auth.uid === data.child('fromUserId').val())", 
     ".write": "(auth != null) && (!data.exists() || $userId === auth.uid || data.child('fromUserId').val() === auth.uid)", 
     ".validate": "newData.hasChildren(['fromUserId','fromUserName','roomId']) && (newData.child('inviteId').val() === $inviteId)" 
     } 
    } 
    } 
} 

當我嘗試規則模擬器用戶2456gd,網址/users/2456gd/ - $userId下驗證步驟成功。但如果嘗試/users/2456gd/invites/abcd2 - $userId下的驗證步驟失敗。

的數據我用:

{ 
"id":"2456gd", 
"fromUserId":"2456gd", 
"fromUserName":"abc", 
"roomId":"family", 
"inviteId":"abcd2" 
} 

任何可能的解釋?以及如何處理它。

謝謝。

Screenshot of the Simulator Results Details

+0

「讀」或「寫」或「兩個」都失敗了? –

+0

讀取成功與第一個網址:/用戶/ 2456gd /,但在第二次也失敗。 – user2536851

+0

解析確切的失敗有點困難。你能分享你的模擬器的截圖與JSON,你正在閱讀的路徑,錯誤消息和身份驗證令牌? –

回答

0

正如你可以在這張照片

Validation failed

驗證在/users/$userId/未能看到,因爲那裏的數據不具有id作爲其子。在/user/$userId數據看起來像這樣

{ 
    "invites": { 
     "abcd2": { 
      "id":"2456gd", 
      "fromUserId":"2456gd", 
      "fromUserName":"abc", 
      "roomId":"family", 
      "inviteId":"abcd2" 
     } 
    } 
} 

由於該數據沒有id作爲其子驗證失敗。它只有一個子女是invites

+0

那麼你如何建議格式化數據? – user2536851

+0

@ user2536851將'.validate'從'$ userId'移動到'$ inviteId'應該可以工作。 –