2012-12-24 34 views
2

我嘗試了以下安全規則爲我的應用程序,但我遇到了問題。我有一個用戶在我火力點和唯一ID爲2

{ 
    "rules": { 
    "users": { 
     "$user": { 
     ".read": "$user == auth.id", 
     ".write": "$user == auth.id" 
     } 
    } 
    } 
} 

我檢查了,當我做".write": "$user == 2",我將無法在火力寫的,但是當我做".write": "$user == '2'",我會能夠在firebase上撰寫。

另一方面,當我做".write": "auth.id == 2",我將能夠寫在firebase。

看來,$用戶被視爲一個字符串,而auth.id被視爲一個數字。我檢查了https://www.firebase.com/docs/security/的文檔,但事實證明這對這件事毫無幫助。

在一次絕望的嘗試中,我嘗試了".write": "$user == auth.id.toString()"這當然給了我這個錯誤:「6:29:類型錯誤:對目標函數調用不是函數。

任何人都可以提供一些關於此事的建議嗎?

我能想到的唯一解決方法是還包括「userId」作爲$ user用戶的子元素,它將被讀作數字值而不是字符串。

回答

2

有兩個非顯而易見的細節可能會讓你失望。

安全規則使用===

始終評估你的==自動轉換爲===由安全規則;要了解更多信息,請查看文檔的「rules expressions」部分。

記錄ID轉換爲字符串

你插入的用戶ID(2)被轉換爲字符串(我無法找到該文檔,但記得讀它)。換句話說,記錄ID是"2"而不是2,所以您的身份驗證數據中的值需要與此值相匹配。

希望這有助於:)

+0

加藤的權利,雖然這實際上是我們結束時的一個錯誤。你的規則應該按原樣工作。作爲臨時解決方法,您可以將規則更改爲「$ user ==''+ auth.id」將auth.id轉換爲字符串。但是這不應該是長期的。 –

+0

感謝您的幫助:)它運行得很漂亮 –

+0

正如@MichaelLehenbauer提到的,這是我們最終的一個錯誤。現在這個問題應該得到解決(將auth.id作爲一個字符串正確對待),但如果遇到任何其他問題,請聯繫我們。 –

2

的解決方法(在另一個答案的評論中提及)來得到這個對我來說在火力地堡模擬器工作:

$user == '' + auth.id