代码之家  ›  专栏  ›  技术社区  ›  Darren

在Firestore中查询当前用户。一次('value')

  •  0
  • Darren  · 技术社区  · 7 年前

    我正在将Firebase实时数据库转换为Firebase Firestore数据库,但在查找查询当前用户的适当引用时遇到困难。

    onAuthUserListener = (next, fallback) =>
    this.auth.onAuthStateChanged(authUser => {
      if (authUser) {
        this.user(authUser.uid)
          .once('value')
          .then(snapshot => {
            const dbUser = snapshot.val();
    
            // default empty roles
            if (!dbUser.roles) {
              dbUser.roles = [];
            }
    
            // merge auth and db user
            authUser = {
              uid: authUser.uid,
              email: authUser.email,
              emailVerified: authUser.emailVerified,
              providerData: authUser.providerData,
              ...dbUser,
            };
    
            next(authUser);
          });
      } else {
        fallback();
      }
    });
    

    最具体地说,替代品是什么 once('value') 和 snapshot.val(); ?

    我原以为

    .onSnapshot(snapshot => {
      const dbUser = snapshot.val();
      ...
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Frank van Puffelen    7 年前

    once('value' 在Firestore中被称为 get() ,及相等於 val() 是 data() 得到() 返回一个承诺,因此:

    .get().then(snapshot => {
      const dbUser = snapshot.data();
      ...
    

    如果您有一个用户集合,其中每个用户的配置文件都存储在一个文档中,其UID作为其ID,则您可以通过以下方式加载该集合:

    firebase.firestore().collection('users').doc(authUser.uid)
      .get()
      .then(snapshot => {
        const dbUser = snapshot.val();
    

    请注意,这一点在 documentation on getting data Cloud Firestore codelab .