Firestore .data() 返回未定义

问题描述 投票:0回答:1

我正在制作一个使用react和nodejs作为服务器的应用程序。我正在使用 firebase auth 和 firestore。

我有一个问题,当我创建用户时一切都很好,用户创建良好并且用户uid和数据存储在数据库中。 但是当我需要获取用户数据时说它未定义..

async function getUserData(uid) {
    const docRef = doc(db, `users/${uid}`);
    const docCifrada = await getDoc(docRef);
    console.log(docCifrada);
    const data = docCifrada.data();
    console.log(` data: ${data}`);
    return data;
  }

这是控制台输出,因为你可以看到 docCifrada 输出很好,但在执行 .data() 后显示未定义

这是用户

这就是我创建用户的方式,我使用 Firebase-admin SDK 因为我只希望管理员能够创建新用户

async function createUser(email, password, name, rol) {
    axios
      .post('http://localhost:5000/api/user', {
        email: email,
        password: password,
        name: name,
        rol: rol,
      })
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        console.log(err);
      });

    axios.get('http://localhost:5000/api/user/info').then((info) => {
      const docRef = doc(db, `users/${info.data.uid}`);
      setDoc(docRef, { email: email, name: name, rol: rol });
    });
  }

服务器端

app.post('/api/user', jsonParser, (req, res) => {
  const user = req.body;
  getAuth()
    .createUser({
      email: user.email,
      password: user.password,
      displayName: user.name,
    })
    .then((UserRecord) => {
      console.log(UserRecord);
      app.get('/api/user/info', (req, res) => {
        res.send(UserRecord);
      });
    })
    .catch((err) => {
      console.log(err);
    });
});

谢谢你

用户数据未显示

javascript firebase express google-cloud-firestore
1个回答
0
投票

我找到了一个解决方案,我改变了在数据库中存储用户的方式,之前我将用户存储在前端,现在我将漏洞移动到服务器。


    app.post('/api/user', jsonParser, async (req, res) => {
      const user = req.body;
      console.log(user);
      await getAuth()
        .createUser({
          email: user.email,
          password: user.password,
          displayName: user.name,
        })
        .then((UserRecord) => {
          db.collection('users').doc(UserRecord.uid).set({
            email: user.email,
            name: user.name,
            rol: user.rol,
          });
        })
        .catch((err) => {
          console.log(err);
        });
    });

© www.soinside.com 2019 - 2024. All rights reserved.