错误:FIREBASE致命错误:数据库已多次初始化

时间:2019-04-18 13:50:44

标签: javascript node.js firebase firebase-authentication nodemailer

简介

我正在使用将Firebase用作数据库(实时数据库)的应用程序。我们仅在后端(基于Node Express构建的REST API)上使用firebase-admin进行需要管理员权限的操作,例如用户身份验证,用户帐户删除等。

问题摘要

因此,我正在尝试做的事情是,正在由管理员批准的用户,由于状态为待处理,因此其状态应更改为true。因此,下面给出的代码将筛选出特定的用户,并在数据库中查找该用户并将批准状态更改为true。我已注释了处理数据库操作的代码。

问题:

我在这里面临两个问题:

  1. 如果我保留数据库操作代码的注释,并且有新的注册,则会从admin向用户发送两封邮件。首先是“注册成功”,其次是“注册过程中的错误”(根据代码不应发生这种错误)。

  2. 如果我删除数据库操作的注释,则会发生以下错误:

  

错误(运行时):@ 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('/')
        }

    })

})

1 个答案:

答案 0 :(得分:0)

关于数据库致命错误,这对我有用:

var db = admin.database();
db.ref("Path till child"+newPostKey).update({approve : true});

在这种情况下,直到child =“ BMS / UserDetails /”的路径