【发布时间】:2016-03-23 17:34:47
【问题描述】:
注意:这个问题被标记了 polymer 因为Polymer库是用来生成Javascript的。
这个问题是关于处理 Firebase 安全性的两个不同但相关的问题。在尝试使 Firebase 安全规则发挥作用时,问题 1 和问题 2 似乎暗示了相反的现实和相反的结果。 (FWIW:Here is my prior unsuccessful attempt to write this question。)
Here is the live code in a JSBin.
http://jsbin.com/hinehoyigo/edit?html,output
问题 1
Firebase 安全规则阻止写入 Firebase
说明
- 输入您的 Firebase ID。示例:“hot-sauce-123”
- 在新标签页或窗口中,转到您的 Firebase 并将其打开
- 允许匿名身份验证: 你的火力基地 > 登录和验证 > 匿名标签 > 勾选“启用匿名用户验证”
- 不应用安全规则:安全与规则 > { “规则”:{ “.read”:是的, “.write”:真 } }
- 返回jsbin
- 选择“匿名”作为身份验证提供者:下拉菜单 > 匿名
- 单击标有“登录”的按钮
- 验证右侧每个字段的登录状态
- 打开您的控制台:Chrome > 查看 > 开发人员 > 开发人员工具
- 单击标有“将用户打印到控制台”的按钮
- 通过验证打印到控制台的用户对象来双重检查登录状态
- 单击标有“将 Firebase 打印到控制台”的按钮
- 通过检查打印到控制台的 Firebase URL 来验证正确的 firebase
- 点击标有“写入 Firebase - 普通网址”的按钮
- 检查您的 Firebase 数据;注意没有写入发生
- 单击标有“写入 Firebase — .json 网址”的按钮
- 检查您的 Firebase 数据;通知写入成功
- 区分两次写入尝试,因为前一次尝试写入 {"quux":"baz"}; 后者尝试写 {"jquux":"jbaz"}
- 添加安全规则:安全和规则 > { “规则”:{ “用户”:{ "$uid": { ".read": "auth != null && auth.uid === $uid", ".write": "auth != null && auth.uid === $uid" } } } }
- 再次单击标有“写入 Firebase — .json 网址”的按钮
- 检查您的 Firebase 数据;注意写现在失败
- 结论/问题陈述:Firebase 安全规则阻止写入 Firebase。
问题 2
模拟器阻止 .json URL 被使用(如上所述)
说明
- 打开您的 Firebase
- 验证安全规则是否到位(参见上述问题 #1 中的步骤 #19)...
- 打开您的模拟器:垂直导航菜单 > 模拟器
- 选中标记为“自定义身份验证”的单选按钮
- 自定义身份验证输入字段应类似于 “{提供者:'匿名',uid:'ag69g401-f097-4171-bca4-927fd1a6e1f3'}”
- 单击标有“身份验证”的按钮
- 验证小绿色复选标记位于标有“自定义身份验证”的单选按钮旁边
- 转到第 2 节
- 点击标签为“写”的标签
- 在标有 URL 的输入字段中,输入“users/ag69g401-f097-4171-bca4-927fd1a6e1f3/foo/bar”
- 验证您刚刚输入的 URL 路径中的用户 ID,是否与上述自定义身份验证字段中的 uid 值匹配
- 单击标有“模拟写入”的按钮
-
通知回复说:
尝试用auth={"provider":"anonymous","uid":"ag69g401-f097-4171-bca4-927fd1a6e1f3"}写{"key":"value"} to /users/ag69g401-f097-4171-bca4-927fd1a6e1f3/foo/bar/ /用户 /users/ag69g401-f097-4171-bca4-927fd1a6e1f3:.write: "auth != null && auth.uid === $uid" => 是的允许写入。 - 注意:此结果与上述步骤 #14 和 #15 的结果相反,其中纯 URL(未附加 .json)无法写入
- 将“.json”附加到 URL,以便输入字段读取类似 “用户/ag69g401-f097-4171-bca4-927fd1a6e1f3/foo/bar.json”
- 单击标有“模拟写入”的按钮
-
通知回复说:
路径无效。模拟中止。 - 注意:此结果与上述步骤 #16 和 #17 的结果相反,其中 .json 附加 URL 是唯一有效的;
- 请注意,这些模拟器测试显示的结果与上述问题 #1 中的实时代码测试结果相反
【问题讨论】:
标签: firebase polymer polymer-1.0 firebase-security