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

不用担心,文档有时难以浏览。让我知道它是否有效,因为我从来没有真正尝试过。 –

相关问题