使用 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 中处理当前用户服务的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 6 中解码 firebase/php-jwt
使用 Angular 2 添加 Firebase 的单元测试
有没有办法从客户端应用程序中调用 Firebase 服务器“功能”,比如 Angular 2?