-1
當user1 - > user2(user1向user2發送請求)。我想執行使用火力規則某些檢查,它們是:
- 檢查是否存在USERNAME2
- 檢查如果兩個用戶尚未朋友
的,我已經寫了下面的規則:
{
"rules":
{
"requests":
{
"$requestId":
{
".read": "auth != null",
".write": "auth!=null &&
data.child('username2').val() == true &&
root.child('usernames-list').child(data.child('username2')).exists() &&
!root.child('user-requests').child(auth.uId).child('accepted-pending').child($requestId2).child(data.child('username2')).exists()"
}
}
}
}
但它在兩個方面會返回以下錯誤:
- data.child('username2')---->第9行:child()需要一個字符串參數。
- data.child($ requestId2)---->第9行:未知變量$ requestId2
數據結構:
requests
---$requestId
---key: value
user-requests
---$userId
---pending
---$requestId
---key: value
---accepted
---$requestId
---key: value
---rejected
---$requestId
---key: value
---unfriend
---$requestId
---key: value
---accepted-pending
---$requestId
---key: value
傳入的JSON:
user1 --> authId of user1
username1 --> username of 1st user
username2 --> username of 2nd user
...
注1 :我試過使用newData.
而不是data.
,但仍然出現相同的錯誤。注意2:我可以通過創建一個單獨的列表來避免$requestId2
(錯誤),該列表只包含用戶user1是朋友的用戶名,並將其與它進行比較;而且,newData('username2').isString()
也會返回相同的錯誤
但我仍然需要能夠使用data.('username2')
作爲字段root.child()
編輯1:以下規則發佈成功,但我不確定它是否仍然按照我所提到的(需要檢查):
".write": "auth!=null &&
newData.child('username2').val() == true &&
root.child('usernames-list').hasChild(newData.child('username2').val()) &&
!root.child('user-requests').child(auth.uId).child('accepted-pending-usernames').hasChild(data.child('username2').val())"
價:Firebase security - newData() as a parameter of hasChildren() expression
's/auth.uId/auth.uid/g'(換句話說:用'auth.uid'替換'auth.uId')來擺脫第一個錯誤信息。 JavaScript是區分大小寫的和'auth.uId' <>'auth.uid'。 –
用'$ requestId'替換'$ requestId2'來擺脫第二個錯誤信息。 –
@FrankvanPuffelen但是'$ requestId'和'$ requestId2'並不總是相同的。因此,它更像'$ wildcard1'和'$ wildcard2' – Zen