【问题标题】:Query current user .once('value') in Firestore在 Firestore 中查询当前用户 .once('value')
【发布时间】:2019-05-12 23:31:31
【问题描述】:

我正在将 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();
  ...

【问题讨论】:

  • 下面是once('value' 等价物的答案,但我不知道 `this.user(authUser.uid)` 是什么。
  • 谢谢弗兰克。 `this.user(authUser.uid)` 只是我通过context 访问插件的方式。为你的回答干杯,我现在就试试。
  • 我正在和你一样的问题上挣扎。你想通了吗?我不够聪明,无法从firebase文档飞跃到编写一些可以从firestore中获取用户的东西,该用户在身份验证上下文中具有与authUser相同的uid。你找到方法了吗?

标签: javascript firebase google-cloud-firestore


【解决方案1】:

once('value' 在 Firestore 中的等效项称为 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

【讨论】:

猜你喜欢
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2019-03-27
  • 2012-09-21
相关资源
最近更新 更多