【问题标题】:Security rule to only allow write for users with verified emails安全规则,仅允许具有已验证电子邮件的用户写入
【发布时间】:2017-07-17 03:27:00
【问题描述】:

我有一个非常简单的写入安全规则,应该只允许拥有经过验证的电子邮件的用户写入数据,

"someNode": {
  ".write": "auth.token.emailVerified === true"
}

由于某种原因,我仍然在具有特定用户令牌的模拟器和具有相同用户的应用程序中被拒绝许可。我仔细检查了客户端中的用户对象,它确实有emailVerified === true,因此我不确定为什么这不起作用。

截图:

【问题讨论】:

  • 你能分享一个模拟器失败的截图吗?此屏幕截图应包含您在模拟器中指定的路径、规则、用户身份验证、失败和您正在编写的数据。
  • 在客户端测试会更容易
  • @FrankvanPuffelen 补充说,我只能在模拟器中使用匿名身份验证,但是传递给它的 uid 令牌来自通过Email/Password 进行身份验证的测试用户,同一用户从实际客户端测试(不是模拟器) 收到相同规则的permission denied 错误
  • 模拟器不会读取用户的实际token。模拟安全规则时,只有您在模拟器中输入的有效负载可用。对于匿名帐户,这意味着您只能获得 provideruid
  • @FrankvanPuffelen 确实在模拟器中手动添加了有效负载,但是在客户端中仍然遇到问题,我收到FIREBASE WARNING: set at /queue/create/tasks/-Kdvoc0u3OWz3_LTDku1 failed: permission_denied 用于拥有emailVerified: true 的用户,其中task 指的是someNode in我的问题,将规则更改为 auth !== null 工作正常

标签: firebase firebase-realtime-database firebase-authentication firebase-security


【解决方案1】:

原来auth.token.emailVerified 应该是auth.token.email_verified 这与在客户端呈现此类数据的方式有点不一致。

【讨论】:

  • 该死。当我看到您的问题时,我立即考虑了这一点,但以为我只是记错了语法。我应该检查一下。 :-/
  • @FrankvanPuffelen 我在文档中找不到对此的任何引用:/ 它实际上在我们从客户端上的 javascript SDK 获得的用户对象中显示为 emailVerified,因此有点误导。
猜你喜欢
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2017-01-17
  • 2015-03-25
  • 2018-10-17
  • 2011-07-27
相关资源
最近更新 更多