【问题标题】:How do I write data to firestore when creating a new user?创建新用户时如何将数据写入firestore?
【发布时间】:2019-10-01 13:38:42
【问题描述】:

我正在尝试在 firebase 数据库上创建一个数据条目,以便在用户在我的网站上注册时存储有关用户的其他信息。

我尝试在 createUserWithEmailAndPassword() 之后的 .then() 函数中将数据写入数据库,因为这是我为用户提取用户 ID 的唯一方法(我希望使用 uid 作为我创建的记录的关键字段)

(req, res) => {

        // extract user data from the form
        const newUser = {
            fname: req.body.fname,
            lname: req.body.lname,
            email: req.body.email,
            pw: req.body.pw,
            pw_c: req.body.pw_c
        }

        // carry out validation
        const { valid, errors } = validateRegistrationData(newUser);
        if (!valid) return res.status(400).json(errors);

        // create new firebase user
        firebase
            .auth()
            .createUserWithEmailAndPassword(newUser.email, newUser.pw)
            .then(data => {

                let uid = data.user.uid;

                // make a database entry to store the users info
                // by default, assumes that the user is a secondary user
                let userData = {
                    fname: newUser.fname,
                    lname: newUser.lname,
                    email: newUser.email,
                    utype: 1,
                    createdon: admin.firestore.FieldValue.serverTimestamp(),
                    intitems: []
                }

                newUserDoc = db
                                .collection("users")
                                .doc(uid)
                                .set(userData)

                return res.status(200).json("Success: new user created.");
            })
            .catch(err => {
                if (err.code === "auth/email-already-in-use"){
                    return res.status(400).json({ email: "Email is already in use" });
                } else {
                    return res.status(500).json({ error: err.code });
                }
            });

        return res.status(200).json("Success: new user created.");
    }

服务器以{Success: new user created."} 响应。身份验证部分似乎在我的 firebase 控制台的 Authentication 部分中创建了一个新用户。但是,我的数据库的 users 集合中没有出现新的数据条目。

【问题讨论】:

  • 在您的 set 方法中返回 thencatch
  • return res.status(200).json("Success: new user created.");在异步set()操作完成之前执行,这就是为什么没有创建记录。
  • 看看丹的回答。如果您有错误,请使用日志更新您的问题。

标签: javascript database firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

.set 返回一个仍需要运行完成的承诺。但是,目前您不是在等待承诺,而是通过res.send 回复。

您可以将 .then(() => { do stuff here }) 附加到 .set 的末尾。如果这是你在那个函数中做的最后一件事,你可以从那里做 res.send。

return db.collection("users").doc(uid).set(userData).then(() => {
          return res.status(200).json("Success: new user created.");
        })
        .catch(error => {
          console.log(error) 
        })

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2017-03-09
    • 1970-01-01
    • 2019-06-06
    • 2017-11-12
    • 2021-08-02
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多