Введение
Я работаю над приложением, которое использует FireBase в качестве базы данных (База данных RealTime). Мы используем firebase-admin в бэкэнде (API REST, построенный на Node Express) только для операций, требующих прав администратора, таких как аутентификация пользователя, удаление учетной записи пользователя или тому подобное.
Краткое изложение проблемы
Итак, что я пытаюсь сделать, так это то, что пользователь, который одобрен администратором, должен изменить свой статус на true, так как его статус ожидал. Таким образом, приведенный ниже код отфильтровывает конкретного пользователя и ищет пользователя в базе данных и изменяет статус подтверждения на true. Я прокомментировал код, который обрабатывает работу базы данных.
Проблема:
У меня здесь две проблемы:
Если я буду комментировать код операции базы данных, и если будет новая регистрация, то пользователю будет отправлено два письма от администратора. Во-первых, «регистрация прошла успешно», а во-вторых, «ошибка при регистрации» (что не должно происходить согласно коду).
Если я удаляю комментарии о работе базы данных, возникает следующая ошибка:
Ошибка (во время работы): @ firebase / database: FIREBASE WARNING: Исключение было вызвано обратным вызовом пользователя.
Ошибка: FIREBASE FATAL ERROR: База данных инициализирована несколько раз.
Убедитесь, что формат 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('/')
}
})
})