为了方便阅读此问题,请参考以下URL:
URL定义:url1 = 'https://my-firebase.firebaseio.com/users/user-id/settings';
url2 = url1 + '.json';
我测试了两种不同的安全场景——有安全性和没有安全性。无论是在Firebase模拟器中还是在现实生活中。如下所示。
without-security.json:{
"rules": {
".read": true,
".write": true
}
}
with-security.json:{
"rules": {
"users": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid",
"settings": {}
}
}
}
}
现在,考虑一下Firebase模拟器与现实测试的不同结果。
测试结果: Security Simulator Real life
-------- --------- ---------
url1 No (untested) Fails (without error message)
url2 No (untested) Success!
url1 Yes Success! Fails (without error message)
url2 Yes Invalid path. Simulation aborted. POST <url2> 401 (Unauthorized)
问题
- 是什么原因导致了测试结果与现实生活之间的差异
- 为了让现实生活场景中的
with-security.json
规则生效,我应该尝试什么
@FrankvanPuffelen在此处回答:
这两个问题都是因为您使用了两种不同的访问Firebase的方法:JavaScriptSDK和RESTneneneba API。虽然这两种方法可以一起使用,但您必须确保提供所需的信息。一般来说,如果你坚持使用一种从单个客户端访问Firebase的方式,你会有更轻松的体验。