繁体   English   中英

CRUD 操作 React 的 Firestore 安全规则

[英]Firestore Security Rules for CRUD Operations React

我对 firebase 比较陌生,并且一直在使用它来集成 Firestore 和身份验证与我正在开发的 ReactJS 应用程序。

我知道 collections 保存文档,并且有效的文档保存键值对。 我有一系列歌曲,其中包含以下字段:-

  1. 创建的时间戳

  2. 歌词

  3. 歌名

我可以使用 firebase 身份验证登录用户,当他们登录并创建新歌曲时获取用户的 UID,使用文档 ID 作为 UID 将条目输入数据库。

只有当我将规则设置为

match /{document=**} {allow read, write:}

当我将规则更改为:-

rules_version = '2';
service cloud.firestore {

  match /databases/{database}/documents {
  match /songs/{songID} {
     allow read:  if request.auth!=null;
     allow write: if isValid();
  }

  function isValid(){
     return request.resource.data.uid == request.auth.uid;
  }}}

运行时出现以下错误。

Unhandled Rejection (FirebaseError): Missing or insufficient permissions.

我只想确保登录用户可以阅读、编写和更新他/她自己的歌曲,除此之外什么都没有。

1)我无法理解如何构建 firebase 规则来实现这一点并防止权限错误。

2)如果我使用文档ID作为UID,即5首歌曲的相同文档ID。 由于特定用户的文档 ID 相同,我如何能够更新歌曲中的歌曲标题/歌词?

我无法理解如何构建 firebase 规则来实现这一点并防止权限错误。

以下规则可以解决问题:

rules_version = '2';
service cloud.firestore {

  match /databases/{database}/documents {

    match /songs/{songID} {
       allow read:  if request.auth.uid == resource.data.uid;
       allow write: if isValid();
    }

    function isValid(){
       return request.resource.data.uid == request.auth.uid;
    }
  }
}

我建议您观看此文档页面中嵌入的非常清晰的视频: https://firebase.google.com/docs/firestore/security/get-started?authuser=0


如果我使用文档 ID 作为 UID,即 5 首歌曲的相同文档 ID。 由于特定用户的文档 ID 相同,我如何能够更新歌曲中的歌曲标题/歌词?

您不能对不同的 Firestore 文档使用相同的文档 ID。 根据定义,文档 ID 必须是唯一的。 最好的办法是让 Firestore 生成一个文档 ID(例如使用add()方法)并在文档中添加作者uid ,就像您已经完成的那样(因为您执行request.resource.data.uid )。

然后,您可以构建过滤与用户uid对应的文档的查询。 例如:

var user = firebase.auth().currentUser;

var songsRef = db.collection("songs");
var mySongsQuery = songsRef.where("uid", "==", user.uid);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM