FirebaseError:权限缺失或不足(所有者)

时间:2021-04-20 13:27:36

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

这里是我的firestore规则。

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth!=null;
        }
      }
    }

当我设置允许读取时,写入:如果为真;我可以访问数据库。但是,当我将其更改为上面的代码时。我得到:FirebaseError: Missing or insufficient permissions.

我已经阅读了很多关于此错误的问题,唯一有效的解决方案是允许所有人具有读取权限(我认为这会很糟糕)。

我如何验证自己(所有者)的身份? 下面是用于获取文档的代码。

        var firebaseConfig = {
        apiKey: "XXXXXXXXXXXXXXXXXXXXXX",
        authDomain: "XXXXXXXXXXXXXXXXX",
        projectId: "XXXXXXXXXXXX",
        storageBucket: "XXXXXXXXXXXXXXXXX",
        messagingSenderId: "XXXXXXXXXXXXXXX",
        appId: "XXXXXXXXXXXXXXXXXXXX",
        measurementId: "XXXXXXXXXXXX"
        };
        // Initialize Firebase
        firebase.initializeApp(firebaseConfig);
        var db = getFirestore();
        console.log(db)
    
        const docRef = doc(db,"fta-2up-prob", "fta-2up-prob");
        console.log(docRef)
        const snapshot = await getDoc(docRef);
        console.log(snapshot)

如前所述,如果我允许任何人读取数据库,此代码确实有效。 即使看起来很明显,任何建议也会非常感激(我对此非常陌生)。

1 个答案:

答案 0 :(得分:0)

当您需要此权限来访问文档 if request.auth!=null 时,您是说用户需要使用 Firebase 身份验证登录才能访问数据。您的任何代码都没有让用户登录 Firebase 身份验证,因此访问被拒绝。

如果您希望数据库中的文档具有所有者,则必须在数据库之上自己实现。有关此示例,请查看 securing content-owner only access 上的 Firebase 文档。

如果您希望自己作为项目的所有者有权访问所有数据,通常称为应用程序管理员。 Firebase 没有为此内置任何内容,但在其上构建非常容易。举个例子,我的答案在这里:User conflict when using same Auth method for Admin and Normal users | Firebase Auth