javascript - 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)
如前所述,如果我允许任何人读取数据库,则此代码确实有效。即使看起来很明显,任何建议都将不胜感激(我对此非常陌生)。
解决方案
当您需要它来访问文档if request.auth!=null
时,您是说用户需要使用 Firebase 身份验证登录才能访问数据。您的任何代码都没有将用户登录到 Firebase 身份验证,因此访问被拒绝。
如果您希望数据库中的文档拥有所有者,则必须自己在数据库之上实现该所有者。请查看 Firebase 文档,了解有关保护内容所有者仅访问权限的示例。
如果您希望自己作为项目的所有者能够访问所有数据,则通常称为应用程序管理员。Firebase 没有为此内置任何东西,但在上面构建它非常容易。看一个例子,我的回答是:对管理员和普通用户使用相同的身份验证方法时的用户冲突 | Firebase 身份验证
推荐阅读
- javascript - 如何在 IntelliJ/WebStorm 中跳转到导入的 JavaScript 文件
- vba - 循环遍历 Excel 工作簿文件夹并仅将带有关键字的工作簿附加到主工作表
- java - 如何使用 for 循环打印数字序列图
- webgl - Shadertoy 着色器未在 p5js 中编译
- python - 获取我的数据集日志的另一种解决方案是什么?
- python - 在 Django 通道中查询模型
- python - 使用 Python 编写 Discord 机器人 - 如何让它加入语音频道?
- javascript - VM14:102 Uncaught (in promise) TypeError
- reactjs - 我作为孩子的功能不是从父组件呈现值
- php - 使用 PHP 将网站连接到 Azure SQL 数据库