S R*_*khu 53 android firebase google-cloud-firestore
我收到了错误
gettingdocuments.com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:权限丢失或不足.
对于else语句中的以下代码
db.collection("users")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
s(document.getId() + " => " + document.getData());
}
} else {
s("Error getting documents."+ task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
Luv*_*nga 61
注意:这完全关闭了数据库的安全性,使其无需身份验证即可写入!这不是推荐的解决方案.
它对我有用.
进入数据库 - >规则 - >
改变allow read, write: if
错误; 为真;
Md *_*san 39
转到数据库 -> 规则:
然后更改以下规则
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
到下面
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ssu*_*dra 18
以上投票的答案对您的数据库的健康是危险的。您仍然可以使您的数据库仅用于读取而不是用于写入:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
allow write: if false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 16
如果您在 Java Swing 应用程序中尝试。
前往Firebase Console
> Project Overview
>Project Settings
然后转到服务帐户选项卡,然后单击生成新的私钥。
您将获得一个 .json 文件,将其放置在已知路径中
然后转到我的电脑属性,高级系统设置,环境变量。
GOOGLE_APPLICATION_CREDENTIALS
使用您的 json 文件路径创建新的路径变量值。
Ras*_*han 16
此处
将 false 更改为 true
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并发布新规则
Pas*_*ghe 12
批准的答案非常危险,因为任何人都可以在未经任何许可的情况下读取或写入您的数据库。我建议使用这个。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow write: if request.auth != null;
allow read: if true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将允许授权人员写入数据库,而任何人都可以读取数据库,以防网站访问者。
xji*_*xji 10
指定安全规则后,我也遇到了“权限缺失或不足”的错误。事实证明,规则默认情况下不是递归的!即如果你写了一个规则
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
该规则不适用于 下的任何子集合/users/{userId}
。这就是我错误的原因。
我通过将规则指定为:
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
此外,如果代码中的集合引用与 firebase 上的集合名称不匹配,您可能会收到此错误。
例如,firebase 上的集合名称是,但您用或users
引用它db.collection("Users")
db.collection("user")
它也区分大小写。
希望这对某人有帮助
因此,就我而言,我有以下数据库规则:
service cloud.firestore {
match /databases/{database}/documents {
match /stories/{story} {
function isSignedIn() {
return request.auth.uid != null;
}
allow read, write: if isSignedIn() && request.auth.uid == resource.data.uid
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见uid
,story
文档上有一个标记所有者的字段。
然后在我的代码中,我查询了所有故事(Flutter):
Firestore.instance
.collection('stories')
.snapshots()
Run Code Online (Sandbox Code Playgroud)
它失败了,因为我已经通过不同的用户添加了一些故事。要解决此问题,您需要向查询中添加条件:
Firestore.instance
.collection('stories')
.where('uid', isEqualTo: user.uid)
.snapshots()
Run Code Online (Sandbox Code Playgroud)
此处提供更多详细信息:https : //firebase.google.com/docs/firestore/security/rules-query
如果有人登陆这里尝试使用服务帐户访问 Firestore:
Service Account User
除了Cloud Datastore User
GCP 的 IAM 设置中的角色之外,我还通过授予服务帐户角色解决了这个问题。
有很多好的答案,但由于这是 Google 对 Firestore 权限被拒绝错误的最高响应,我想我应该为初学者和菜鸟添加一个答案。
如果您编写自己的后端,您会让用户向您的服务器询问某些内容,然后服务器将决定允许他们做什么。例如,您的服务器不允许 user1 删除 user2 的所有数据。
但由于您的用户直接与 Firebase 交互,因此您不能真正信任用户发送给您的任何内容。例如,用户 1 可以将其删除请求中的用户 ID 更改为“用户 2”。
Firestore 安全规则是您告诉 Firestore 又名后端服务器的地方,允许谁读取和写入哪些数据。
Firestore 团队的这段视频非常有帮助。
https://www.youtube.com/watch?v=eW5MdE3ZcAw
如果您遇到“权限缺失或权限不足”错误,我强烈建议您观看该视频的完整 22 分钟,然后再尝试其他操作。
我从 1/10 到 7/10 了解了安全规则的工作原理,以及为什么我仅从这个视频中得到了错误。
入门指南也很有用,可以帮助回答视频未涵盖的问题。https://firebase.google.com/docs/firestore/security/get-started
确保您的数据库不为空,或者您的查询是针对不存在的集合的
小智 5
npm i --save firebase @angular/fire
在 app.module 确保你导入
import { AngularFireModule } from '@angular/fire';
import { AngularFirestoreModule } from '@angular/fire/firestore';
Run Code Online (Sandbox Code Playgroud)
在进口
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule,
AngularFireAuthModule,
Run Code Online (Sandbox Code Playgroud)
实时数据库规则确保你有
{
/* Visit rules. */
"rules": {
".read": true,
".write": true
}
}
Run Code Online (Sandbox Code Playgroud)
在云 Firestore 规则中确保你有
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
53501 次 |
最近记录: |