首页 > 解决方案 > 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';

...并且,从那里做点什么。但是,我不知所措。任何帮助将不胜感激。提前致谢!

标签: javascriptfirebaseionic3google-cloud-firestoreangularfire2

解决方案


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


推荐阅读