gpt4 book ai didi

Angular + Firestore : how to allow public read access to a document

转载 作者:太空狗 更新时间:2023-10-29 18:13:05 25 4
gpt4 key购买 nike

我是一名学生开发人员,在我的 Angular 应用中尝试使用新的 Firestore,但遇到了安全规则问题。

我要实现的目标:

使用模板绑定(bind)以 Angular View 显示 Firestore 文档。未经身份验证的用户应该可以查看该文档。

问题:

如果未经身份验证的用户试图查看该页面,则会发生权限错误:

ERROR Error: Missing or insufficient permissions. at new FirestoreError (error.js:164)

模板文件:

<p>{{ (item | async)?.name }}</p>

component.ts 文件:

interface Profile {
name: string;
}
...
private itemDoc: AngularFirestoreDocument<Profile>;
item: Observable<Profile>;
...
ngOnInit() {

this.itemDoc = this.afs.doc<Profile>('profiles/0mlC8uWaKeArzk0sfIfX');
this.item = this.itemDoc.valueChanges();
}

Firestore 规则:

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

最佳答案

如您所知,对 Cloud Firestore 数据的访问由 Security Rules 控制.当您收到“权限不足错误”时,这意味着您的读取或写入已被规则拒绝。

在你的情况下,你有这些规则:

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

粗略地翻译成英文,这些表示“只要用户登录,就允许读取或写入数据库中的任何文档”。

因此,如果您遇到错误,则表示用户未登录 (request.auth == null)。

所以你有两个选择:

选项 1:将身份验证添加到您的应用

您可以添加 Firebase Authentication到你的应用程序。满足您的规则的最简单的事情是匿名身份验证:

firebase.auth().signInAnonymously()
.then(function() {
// You're signed in, reads will work
})
.catch(function(error) {
// Handle Errors here.
// ...
});

选项 2:更改您的安全规则

如果你希望所有用户都能够读取你应用中的所有数据,你可以按如下方式开放规则:

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

关于 Angular + Firestore : how to allow public read access to a document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com