2015-10-19 73 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

相关问题