angular + firestore:如何允许对文档进行公共读取访问

时间:2017-10-05 19:06:13

标签: angular firebase google-cloud-firestore

我是一名学生开发人员,在我的角度应用程序中尝试使用新的Firestore,并且坚持使用安全规则。

我想要实现的目标:

使用模板绑定在角度视图中显示firestore文档。该文档应该可以查看未经过身份验证的用户。

问题:

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

  

错误错误:权限丢失或不足。       在新的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;
     }
   }
}

2 个答案:

答案 0 :(得分:6)

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

在您的情况下,您有以下规则:

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

大致翻译成英文,只要用户登录&#34;就可以读取或写入数据库中的任何文档。

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

所以你有两个选择:

选项1:将Auth添加到您的应用

您可以将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;
      }
   }
}

答案 1 :(得分:0)

data.GridData.map(function(item){
    var row = "<tr>";
        row += "<td>" + item.UserId + "</td>";
        row += "<td>" + item.UserRole + "</td>";
        row += "<td>" + item.Action + "</td>";
        row += "</tr>";
    $('#MainGrid').find('tbody').append(row);