我正在尝试在我的数据库上写一些规则,阻止用户写入,除非他们使用匿名'以外的提供程序进行身份验证。这是我的规则,但由于某种原因,当我使用Facebook登录而不是使用电子邮件/密码登录时,它可以正常工作;我得到一个权限被拒绝错误。 PS电子邮件/密码用户是在升级后的SDK之前创建的。有什么想法,为什么这不起作用?
"updates": {
".read": "auth !== null",
".write": "auth !== null && auth.provider !== 'anonymous'",
"$location_id": {
".indexOn": "validFrom",
"$update_id": {
".validate": "newData.hasChildren(['displayName', 'place_id', 'name', 'statusValueId', 'update_id', 'user_id', 'validFrom', 'votes'])"
}
}
},
答案 0 :(得分:2)
检查无效的原因的最佳方法是在firebase控制台中使用模拟器。
您可以在数据库>规则>模拟器(右上角)
中找到它答案 1 :(得分:1)
我怀疑您遇到了与我相同的错误,其中auth.provider
等于anonymous
用于电子邮件/密码验证而不是password
。可悲的是,我还没有收到Firebase团队的答复。
auth.provider is not set to 'password' when user signs-in with email and password
更新:我在Firebase的Google网上论坛页面获得了一些很好的帮助。他们确认了这个bug并提供了一个解决方法。请参阅以下链接:
https://groups.google.com/d/topic/firebase-talk/C-ljg-CCKl0/discussion