Firebase Realtime Database安全规则如何类型转换比对数值UID与字符串auth.uid
解决方案
你可以直接在Firebase安全规则中调用类型转换方法完成跨类型比对,无需修改现有数据库结构,最优方案如下:
最优方案:将数值类型的UID转为字符串比对
Firebase Realtime Database安全规则内置了数值类型的toString()方法,你可以把数据库中存储的数字类型UID转为字符串后,直接和auth.uid比对即可。
修改后的规则示例:
".read": "auth.uid!= null && data.child('members/0').val().toString() == auth.uid"
注意把
auth.uid != null判断放在最前面,避免未登录场景下后续逻辑触发空引用报错。
如果要进一步提升规则严谨性,避免目标路径不存在或值类型异常导致的规则报错,可以补充存在性和类型校验:
".read": "auth.uid!= null && data.child('members/0').exists() && data.child('members/0').isNumber() && data.child('members/0').val().toString() == auth.uid"
备选方案:将auth.uid转为数值比对
如果你的业务中确认所有auth.uid都是纯数字组成,也可以把字符串类型的auth.uid转为数字后比对:
".read": "auth.uid!= null && data.child('members/0').val() == Number(auth.uid)"
该方案存在局限性:如果
auth.uid包含非数字字符,转换后会得到NaN,比对会直接失败,因此优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Irfan S
相关产品推荐
相关产品推荐

