javascript - Firebase angularfire2 - 如何仅从当前用户返回数据?
问题描述
我试图弄清楚如何将集合限制为只返回用户的数据,而不是每个人的数据。
在我使用 FirebaseService 的示例中,仅显示了 CRUD 示例,其中返回的数据就是一切。
import { Injectable } from "@angular/core";
import { Platform } from 'ionic-angular';
import 'rxjs/add/operator/toPromise';
import { AngularFirestore } from 'angularfire2/firestore';
import * as firebase from 'firebase/app';
import 'firebase/storage';
@Injectable()
export class FirebaseService {
constructor(
public afs: AngularFirestore,
public platform: Platform
){}
getEvents(){
return new Promise<any>((resolve, reject) => {
this.afs.collection('/events').snapshotChanges() // add +auth.uid ... or something?
.subscribe(snapshots => {
resolve(snapshots)
})
})
}
...
为了只取回用户的事件,我想我需要添加:
import { AngularFireAuth } from 'angularfire2/auth';
...并且,从那里做点什么。但是,我不知所措。任何帮助将不胜感激。提前致谢!
解决方案
您可以通过添加规则来限制这一点。例如,您正在使用 /users/ 节点来存储用户信息。您只能限制与 userId 匹配的登录用户可以访问 /users/
match /databases/{database}/documents {
function isSignedIn() {
return request.auth != null;
}
function isOwner(userId) {
return request.auth.uid == userId
}
match /users/{userId} {
allow get: if isSignedIn()
&& isOwner(userId);
....
}
}
获取用户 ID
constructor(
private afAuth: AngularFireAuth )
// then
ngOnInit() {
this.afAuth.authState;
this.afAuth.authState.subscribe(
user => {
this.userInfo = user; <-- You can store user Id information to user variable
},
err => {
console.log(err);
}
}
您可以使用 this.userInfo.uid 进行进一步调用。
推荐阅读
- reactjs - LibraryManagedAttributes 未映射元素类型
- cloudkit - CloudKit - 如何使用 CKModifyRecordsOperation 检索刚刚保存的记录的 ckRecordID
- google-apps-script - 如果 Google 脚本中的 AND 语句根据一个单元格中的更改和另一个单元格中的值将数据移动到另一张表
- python - 在哪里安装 Auto Keras 在 pip 上出现错误
- java - 将参数附加到对象 []
- django - 在 django admin 中加入两个表以获取 display_list 的列
- javascript - 按iso字符串降序排序不起作用
- asp.net-mvc - 同一区域同名的控制器
- spring-boot - Spring Boot - 无法处理 IllegalStateException
- javascript - 如何在 JS 正则表达式中表示“iPhone10,3”、“iPhone10,6”、“iPhone11,2”、“iPhone11,4”、“iPhone11,8”中的任何一个