1

我有一個只使用Google身份驗證的Firebase應用程序。我想根據身份驗證提供程序的uid,向從未使用Firebase項目身份驗證過的用戶訪問數據庫的某些部分。我想使用目錄API檢索Google uid,然後將它們存儲在白名單節點中。在Firebase安全規則中使用提供者uid

whitelist: { 
    12345678: true, 
    23456789`: true 
}, 
data: {} 

那我就喜歡做這樣的事情在安全規則:

"rules": { 
    "data": { 
    ".read": "root.child('whitelist/' + auth.providerUid).exists() 
    } 
} 

或者是這樣的:

"rules": { 
    "data": { 
    ".read": "root.child('whitelist/' + auth.providerData[0].uid).exists() 
    } 
} 

但有可能訪問提供商UID中安全規則?如果是這樣,這是如何工作的?

+0

爲什麼不能使用'auth.uid'? –

+0

因爲我希望能夠在G Suite用戶使用Firebase應用進行身份驗證之前將其列入白名單。所以我想加入白名單的用戶可能還沒有Firebase uid。 –

+0

有趣。我只見過這種類型的電子郵件地址白名單。與您的方法相比,您是否看到了弊端? –

回答

2

的語法似乎略有不同根據reference documentation:與此用戶帳戶相關聯的所有身份

firebase.identities

字典。字典的鍵可以是以下任何一種:emailphone,google.com,facebook.com,github.com, twitter.com。字典的值是與帳戶關聯的每個身份提供者的唯一標識符的數組。例如,auth.token.firebase.identities["google.com"][0]包含帳戶

相關聯的第一個谷歌用戶ID因此,看來你需要auth.token.firebase.identities["google.com"][0]。我必須承認我從來沒有使用過這個,因爲我的安全規則僅依賴於用戶的主ID:auth.uid

+0

嗨,弗蘭克,謝謝你回答我的問題。我剛剛閱讀文檔中的相同頁面,但您在我之前發佈了幾秒鐘。 –

+0

不用擔心,文檔有時難以瀏覽。讓我知道它是否有效,因爲我從來沒有真正嘗試過。 –