从 angularfire 检索 UID

Retrieving UID from angularfire

我用的是最新版的angularfire。我看这个主题,有一些解决方案,但他们正在解决旧的 angularfire。 我如何从 angularfire 检索用户 ID?

注意:我试过这段代码,但它不起作用:

this.users = this.db.collection<User>('users').doc(auth.currentUser.then((e) => e?.uid)).valueChanges();

我的 firebaseService 代码:(使用此代码,它获取所有用户信息。我需要当前用户数据)。

export class FirebaseService {
  usersCollection: AngularFirestoreCollection<User>;
  users: Observable<User[]>;

  isLoggedIn = false;
  constructor(public auth: AngularFireAuth, public db: AngularFirestore) {
    this.users = this.db.collection<User>('users').valueChanges();
  }

  async signInWithEmailandPassword(email: string, password: string) {
    await this.auth.signInWithEmailAndPassword(email, password).then((res) => {
      this.isLoggedIn = true;
      localStorage.setItem('user', JSON.stringify(res.user));
    });
  }

  async signUpWithEmailandPassword(email: string, password: string) {
    await this.auth
      .createUserWithEmailAndPassword(email, password)
      .then((res) => {
        this.isLoggedIn = true;
        localStorage.setItem('user', JSON.stringify(res.user));
        var user = res.user;
        this.db
          .collection('users')
          .doc(user?.uid)
          .set({
            email: user?.email,
            uid: user?.uid,
          })
          .catch((e) => console.log(e));
      });
  }

  logout() {
    this.auth.signOut();
    localStorage.removeItem('user');
  }

  getUsers() {
    return this.users;
  }
}

您需要反转关系,首先从用户的可观察对象开始,然后将其映射到 valueChanges。

auth.user.pipe(
  switchMap(user => {
    if (!user) { return EMPTY; }
    return this.db.collection<User>('users').doc(user.uid)).valueChanges()
  })
)

请记住用户未登录的情况,就像我在此处所做的那样,除非您正在守卫路线。