Как мне записать данные в firestore при создании нового пользователя? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать запись данных в базе данных firebase для хранения дополнительной информации о пользователе, когда он регистрируется на моем сайте.

Я пытался записать данные в базу данных в .then() функция следует за createUserWithEmailAndPassword (), поскольку это единственный способ для меня извлечь идентификатор пользователя для пользователя (я надеюсь использовать 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."}. Кажется, аутентификационная часть работает при создании нового пользователя в разделе Authentication моей консоли Firebase. Однако в коллекции users моей базы данных нет новых записей.

1 Ответ

3 голосов
/ 01 октября 2019

.set возвращает обещание, которое еще нужно выполнить до конца. Тем не менее, в настоящее время вы не ждете обещания, а вместо этого просто отвечаете с помощью res.send.

. Вы можете добавить .then (() => {делать вещи здесь}) до конца .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) 
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...