2015-10-19 33 views
1

我們正在使用Firebase自定義身份驗證,並希望基於「auth」有效內容數據定義讀/寫訪問規則。但是,出於安全原因,我們不希望將auth.uid的值存儲在Firebase數據的任何位置。也就是說,由於用戶ID不是數據的一部分,我不能使用規則: auth.uid == newData.child(「userId」)。val()在未存儲在數據中的Firebase安全規則中使用字段

有沒有辦法只是僅將數據傳遞給Firebase才能檢查安全規則,但實際上並未將數據保留在Firebase數據庫中?

+0

你想要做什麼檢查?按照它的立場,這讀起來像一個XY問題:http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

+0

讓我試着再解釋。根據我的理解,定義Firebase安全規則時可以使用以下變量:auth,data,newData和$ variables ......但我的問題是:我可以定義一個規則,只使用傳遞給Firebase URL的數據,但不能實際上存儲爲數據的一部分。 – user1790625

+0

不,你不能。請解釋您的使用案例,而不是解釋您的解決方案。 –

回答

1

安全規則有三種可能的數據來源:硬編碼字符串,數據庫數據或身份驗證令牌(即auth)。

您可以,允許您指定您想要的任何信息,而無需將其存儲在Firebase中。請注意,安全令牌的內容不能由用戶僞造,但用戶可以使用讀取;如果你的目標是存儲一些用戶不應該知道的祕密信息,這不是一個選項。

請注意,您可以保護數據庫中的任何路徑,使其不可讀,存儲數據,並且安全規則仍可引用該數據。請記住,security rules cascade,所以你想這個數據在自己的路徑中沒有可讀的父母。

您的評論中提到的安全令牌聽起來完全是用戶身份驗證令牌的多餘部分。如果他們已通過身份驗證,那麼您已經驗證了他們的uid,所以目前還不清楚爲什麼安全令牌會增加任何附加值。

+0

感謝加藤的回覆......現在很清楚..只要Firebase祕密密鑰安全,生成的認證數據(auth)是安全的,可用於安全規則中。您是對的,我們贏了不會在auth變量中保存任何安全/敏感數據。 – user1790625

相關問題