【问题标题】:Best way to handle current user for Service in Angular with Firebase?使用 Firebase 在 Angular 中处理当前用户服务的最佳方式?
【发布时间】: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)));
    })
  }
}
}

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

【问题讨论】:

    标签: angular firebase firebase-authentication


    【解决方案1】:

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

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

    【讨论】:

    • 不知道为什么我没有想到这个,好主意。我会试试看!
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2020-05-14
    • 2020-01-08
    • 2023-04-10
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多