【发布时间】: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方法中返回then或catch。 -
return res.status(200).json("Success: new user created.");在异步set()操作完成之前执行,这就是为什么没有创建记录。 -
看看丹的回答。如果您有错误,请使用日志更新您的问题。
标签: javascript database firebase google-cloud-firestore google-cloud-functions