使用 Firebase 在 Angular 中处理当前用户服务的最佳方式?

Posted

技术标签:

【中文标题】使用 Firebase 在 Angular 中处理当前用户服务的最佳方式?【英文标题】:Best way to handle current user for Service in Angular with Firebase? 【发布时间】:2021-04-18 07:31:12 【问题描述】:

我正在使用 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)));
    )
  


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

【问题讨论】:

【参考方案1】:

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

myUser: any;
...

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

【讨论】:

不知道为什么我没有想到这个,好主意。我会试试看!

以上是关于使用 Firebase 在 Angular 中处理当前用户服务的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 上托管 Angular 项目

在 Angular 6 中解码 firebase/php-jwt

使用 Angular 2 添加 Firebase 的单元测试

有没有办法从客户端应用程序中调用 Firebase 服务器“功能”,比如 Angular 2?

在 Ionic2/Angular2 应用程序中使用 ngFor 获取 Firebase 数据库结果

如何在 NativeScript Angular 应用程序中初始化 Firebase 推送通知