首页 > 解决方案 > 使用 Firebase 在 Angular 中处理当前用户服务的最佳方式?

问题描述

我正在使用 Firebase 进行身份验证和 Firestore。我有一个 Angular 项目。我找到了一种从当前用户的集合中获取数据的方法。通过将用户(通过首先执行 this.auth.currentUser 就像我现在做的那样)传递给我的服务方法,或者只是在服务中使用 AngularFireAuth 当前用户。但是每次都这样做感觉有点过分了。有没有更好的方法让用户以某种方式进入单个属性,或者你应该如何去做?

我有这样的服务。我一直在调用 this.auth.currentUser.then(u => { ... 每次我想获得用户。有没有更好的方法?

import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore, AngularFirestoreCollection, CollectionReference } from '@angular/fire/firestore';
import { BehaviorSubject, combineLatest } from 'rxjs';

import firebase from 'firebase/app';


@Injectable()
export class MyService {
  firestore: AngularFirestore
  constructor(firestore: AngularFirestore,
    public auth: AngularFireAuth) {
    this.firestore = firestore;
    
  create(item: item): any {
    console.log("add..")
    this.auth.currentUser.then(u => {
      item.author = u.uid;
      let referenceCollection: AngularFirestoreCollection<item> = this.firestore.collection<item>('items', ref => ref.where('author', '==', u.uid));
      return referenceCollection.doc(item.id).set(JSON.parse(JSON.stringify(item)));
    })
  }
}
}

也许就像将当前用户存储在可从应用程序打开时设置的服务访问的属性中?我不确定如何实施这种方法。

标签: angularfirebasefirebase-authentication

解决方案


也许您可以将用户存储在第一个查询中,(然后仅在注销事件时覆盖它):

myUser: any;
...

this.auth.currentUser.then(u => {
      myUser = u;
    })

推荐阅读