【问题标题】:Firestore rules how to make user can only read/write to document with their nameFirestore 规则如何使用户只能用他们的名字读/写文档
【发布时间】:2019-12-31 23:22:09
【问题描述】:

这些规则规定只有登录用户才能访问 realtime db 中以其用户 ID 命名的文档。我在问如何在 Firestore 中执行此操作,除了文档的名称不是用户 ID,而是用户名(这是电子邮件的第一部分)

我以前见过这样做,当文档名称是uid,但我的文档名称是用户的用户名,并且用户名存储在身份验证电子邮件中的@之前的部分。

例如,我有这些用户:

  • john@gmail.com

  • jane@gmail.com

我的 Firestore 是:

集合:用户

  • 约翰

  • 简

只有以john@gmail.com 登录的用户才能写入用户中的 john 文档。我不知道如何从auth 变量中取出电子邮件。

有没有办法在不将我的文档重命名为用户 ID 的情况下做到这一点?

【问题讨论】:

  • 您显示的安全规则适用于实时数据库,而您的问题和标签表示 Cloud Firestore。虽然这两个数据库都是 Firebase 的一部分,但它们是完全独立的,一个的安全规则不适用于另一个。要修复错误,您必须为 Cloud Firestore 设置规则。有关如何执行此操作的演练,请参阅stackoverflow.com/a/52129163
  • 是的,我正在使用 CloudFirestore
  • 我的意思是 cloudfirestore 我该怎么做。我没有设置任何实时数据库
  • 我的问题是如何检查用户电子邮件的第一部分是否是他们要编辑的文档的名称
  • @Frank van Puffelen

标签: firebase google-cloud-firestore firebase-security


【解决方案1】:

我发现您可以使用request.auth.token['email'] 获取用户的电子邮件。我只能使用它来允许任何人阅读,只有未经身份验证的人才能创建,以及更新和删除用户只能更新/删除他们自己的文档(使用电子邮件):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{email} {
      allow read;
    }
    match /users/{email} {
      allow update, delete: if request.auth.token['email'] == email;
      allow create: if request.auth.uid != null;
    }
  }
}

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2020-02-07
    • 1970-01-01
    • 2018-09-29
    • 2021-06-22
    相关资源
    最近更新 更多