firebase 中的用户无法在 firestore 中读取或写入自己的文档
A user in firebase is not able to read or write its own documents in firestore
我有一个使用 google 帐户登录的用户,在 firebase 中,用户 ID 是“123”
在 firestore:data 中,存在一个集合,'users',有一个文档,'123',字段 'name : "test"'
在firestore:rules中,规则如下
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, update, write, delete: if request.auth.uid == userId;
}
}
}
在我的组件中我的代码是:
users: Observable<User[]>;
ngOnInit()
{
this.users = this.firestore.collection<User>('users');
}
constructor(public auth: AngularFireAuth, private firestore : AngularFirestore) {}
Html:
<ul>
<li *ngFor='user of angObs | async>
{{ user.name }}
<li>
<ul>
<div *ngIf='auth.user | async as user'>
<p>User id:</p>
{{ user.uid }}
</div>
hmtl 内容如下:
用户编号:
123
当规则为 request.auth.uid != null;
时,用户会看到数据。
当规则为 request.auth.uid == userId;
时,用户看不到数据。
我做错了什么?
您正在查询整个用户集合,因此无法通过此测试,因为您的 userId 需要匹配每个文档 ID。
您需要指定文档的补丁,例如:
this.users = this.firestore.collection('users').doc<User>(userId).get()
这只会导致单个用户文档而不是 User[]
如果您尝试像您
那样查询整个用户集合
users: Observable<User[]>;
您需要向确定权限的用户对象添加自定义 属性
我有一个使用 google 帐户登录的用户,在 firebase 中,用户 ID 是“123”
在 firestore:data 中,存在一个集合,'users',有一个文档,'123',字段 'name : "test"'
在firestore:rules中,规则如下
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, update, write, delete: if request.auth.uid == userId;
}
}
}
在我的组件中我的代码是:
users: Observable<User[]>;
ngOnInit()
{
this.users = this.firestore.collection<User>('users');
}
constructor(public auth: AngularFireAuth, private firestore : AngularFirestore) {}
Html:
<ul>
<li *ngFor='user of angObs | async>
{{ user.name }}
<li>
<ul>
<div *ngIf='auth.user | async as user'>
<p>User id:</p>
{{ user.uid }}
</div>
hmtl 内容如下:
用户编号:
123
当规则为 request.auth.uid != null;
时,用户会看到数据。
当规则为 request.auth.uid == userId;
时,用户看不到数据。
我做错了什么?
您正在查询整个用户集合,因此无法通过此测试,因为您的 userId 需要匹配每个文档 ID。
您需要指定文档的补丁,例如:
this.users = this.firestore.collection('users').doc<User>(userId).get()
这只会导致单个用户文档而不是 User[]
如果您尝试像您
那样查询整个用户集合 users: Observable<User[]>;
您需要向确定权限的用户对象添加自定义 属性