Firebase实时数据库$uid写规则配置后无法写入,交换规则恢复正常
Firebase实时数据库订阅写入规则异常问题
背景
我开发了一个支持用户升级为高级账户的网站,用户点击订阅按钮后,系统会提示操作成功并将订阅者数据写入Firebase实时数据库的subscribe集合,同时通过安全规则保护订阅数据不被随意查看。
问题现象
当配置如下安全规则时,用户无法点击订阅按钮完成写入操作:
{ "rules": { "users": { ".indexOn": "username", ".read": true, ".write": true }, "subscribe":{ "$uid": { ".read": "auth != null && auth.token.email_verified == true", ".write": "auth !== null && auth.uid === $uid" } } } }
但交换subscribe节点$uid下的读写规则后,订阅功能恢复正常:
{ "rules": { "users": { ".indexOn": "username", ".read": true, ".write": true }, "subscribe":{ "$uid": { ".read": "auth !== null && auth.uid === $uid", ".write": "auth != null && auth.token.email_verified == true" } } } }
疑问
我无法理解为何添加$uid匹配的写规则时无法写入,交换规则后却正常,数据库结构未发生变化,两种规则条件的效果不应有差异。
推测方向
可能是当前数据库结构无公私集合区分导致,但尚未确认,参考了Firebase数据结构公私区分的相关讨论。
参考截图

内容的提问来源于stack exchange,提问作者JKxbt33
相关产品推荐
相关产品推荐

