Firebase angularfire2-如何仅从当前用户返回数据?

时间:2018-12-02 21:29:56

标签: javascript firebase ionic3 google-cloud-firestore 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';

...,然后从那里开始。但是,我很茫然。任何帮助将不胜感激。预先感谢!

1 个答案:

答案 0 :(得分:1)

您可以通过添加规则来限制此限制。例如,您正在使用/ 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进行进一步的调用。