我正在使用将Firebase用作数据库(实时数据库)的应用程序。我们仅在后端(基于Node Express构建的REST API)上使用firebase-admin进行需要管理员权限的操作,例如用户身份验证,用户帐户删除等。
因此,我正在尝试做的事情是,正在由管理员批准的用户,由于状态为待处理,因此其状态应更改为true。因此,下面给出的代码将筛选出特定的用户,并在数据库中查找该用户并将批准状态更改为true。我已注释了处理数据库操作的代码。
我在这里面临两个问题:
如果我保留数据库操作代码的注释,并且有新的注册,则会从admin向用户发送两封邮件。首先是“注册成功”,其次是“注册过程中的错误”(根据代码不应发生这种错误)。
如果我删除数据库操作的注释,则会发生以下错误:
错误(运行时):@ firebase /数据库:FIREBASE警告:用户回调引发了异常。
错误:FIREBASE致命错误:数据库已多次初始化。 请确保数据库URL的格式与每个database()调用相匹配。
代码如下:
router.get('/approval', (req, res) => {
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
let errors = [];
var k = 0;
var email = req.query.email;
var keys = Object.keys(userData);
console.log("email : " + email);
for (k = 0; k < keys.length; k++) {
console.log("user email : " + userData.email[k]);
if (!(email.localeCompare(userData.email[k]))) {
console.log("user email : " + userData.email[k]);
var password = userData.password[k];
console.log("password taken ");
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function (user) {
console.log("inside firebase");
//Code to change user's approval status to true
/* var reference = require('../DatabaseRef/reference');
var ref = reference.usersRef;
ref.on('value', gotData, errData);
function gotData(data) {
var userData = data.val();
if (userData != null) {
var keys = Object.keys(userData);
var newPostKey = keys[k];
firebase.database().ref().child('/BMS/UserDetails/' + newPostKey)
.update({ approve: true });
}
}
function errData(err) {
console.log(err);
}
*/
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '**********@gmail.com',
pass: '**********'
}
});
let mailOptions = {
from: '********@gmail.com',
to: email,
subject: "Registration Successful",
text: "Registration is complete ,now you can try logging in through
link given below :.",
html: "<a href='http://localhost:5005/'>Login</a> "
};
transporter.sendMail(mailOptions, function (err, info) {
if (err)
console.log(err)
else
console.log(info);
});
errors.push({ msg: "Registered Successfully" });
res.render('./addUser', { userData, errors });
})
.catch(function (error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log("inside catch");
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '*********@gmail.com',
pass: '**********'
}
});
let mailOptions = {
from: '**********@gmail.com',
to: email, // list of receivers
subject: "Error during user registration",
text: "Error Found : " + errorMessage,
html: "<a href='http://localhost:5005/signup'>Register</a> "
};
transporter.sendMail(mailOptions, function (err, info) {
if (err)
console.log(err)
else
console.log(info);
});
errors.push({ msg: errorMessage });
res.render('./addUser', { userData, errors });
})
break;
}
}
console.log("out of for loop");
}
else {
console.log("User not present");
res.redirect('/')
}
})
})
答案 0 :(得分:0)
关于数据库致命错误,这对我有用:
var db = admin.database();
db.ref("Path till child"+newPostKey).update({approve : true});
在这种情况下,直到child =“ BMS / UserDetails /”的路径