首页 > 解决方案 > FirebaseError:权限缺失或不足(所有者)

问题描述

这是我的火场规则。

    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)

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

标签: javascriptgoogle-cloud-firestorefirebase-security

解决方案


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

如果您希望数据库中的文档拥有所有者,则必须自己在数据库之上实现该所有者。请查看 Firebase 文档,了解有关保护内容所有者仅访问权限的示例。

如果您希望自己作为项目的所有者能够访问所有数据,则通常称为应用程序管理员。Firebase 没有为此内置任何东西,但在上面构建它非常容易。看一个例子,我的回答是:对管理员和普通用户使用相同的身份验证方法时的用户冲突 | Firebase 身份验证


推荐阅读