在Firestore中查询当前用户.once('value')

时间:2018-12-11 22:21:35

标签: javascript firebase google-cloud-firestore

我正在将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 个答案:

答案 0 :(得分:1)

在Firestore中,等效于once('value'的称为get(),等效于val()的称为data()。调用get()会返回一个承诺,因此:

.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