Firestore 规则如何让用户只能读/写他们的名字的文档

She*_* S. 1 firebase firebase-security google-cloud-firestore

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

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

例如,我有这些用户:

  • john@gmail.com

  • jane@gmail.com

我的firestore是:

集合:用户

  • 约翰

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

有没有办法在不将我的文档重命名为用户 ID 的情况下执行此操作?

She*_* S. 5

我发现您可以使用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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)