向数据库添加数据时出现问题

时间:2016-12-06 02:47:59

标签: javascript firebase firebase-realtime-database firebase-authentication

我的问题是通过从表单中获取信息来向数据库添加数据。 我想将信息添加为" name"。我可以添加"电子邮件"正确但不是其他数据。

我的代码:

buttonsignup.addEventListener('click', error => {
  var nameCompany = document.getElementById('nameCompany').value;
  var email = document.getElementById('email').value;
});

function add(nameCompany,email) {
    firebase.database().ref().child('users_company').push({
        nameCompany: nameCompany,
        email: email
    });
}


function intFirebase () {

    /*CURRENT USER*/
    firebase.auth().onAuthStateChanged(function(user) {
        if (user != null) {
            console.log(user);
            console.log('El UID es '+user.uid);
            add(nameCompany,user.email);
        } else {
            console.log('No user is signed in.');
        }
    });
}

window.onload = function() {
    intFirebase();
}

好的,将咖啡变成代码后。我找到了这个解决方案但是......这是一个好习惯吗?



const database = firebase.database();
var user = firebase.auth().currentUser;

/* BOTON SIGNUP */

buttonsignup.addEventListener('click', error => {

	var nameCompany = document.getElementById('nameCompany').value;
	var email = document.getElementById('email').value;
	var password_1 = document.getElementById('password_1').value;
	var password_2 = document.getElementById('password_2').value;
	
	if (password_1 == password_2) {
		if (password_1.length < 8) {
			console.log('Contraseña muy corta');
			document.getElementById("errorPassword").innerHTML = "8 characters";
		} else {
			firebase.auth().createUserWithEmailAndPassword(email, password_1).then (function(result) {
				add(nameCompany,email);
			}).catch(function (error) {
				var errorCode = error.code;
				var errorMessage = error.message;
				};
			});
		}
	} else{
		console.log('errorPassword');
	}
});

function add(nameCompany,email) {
	firebase.database().ref().child('users_company').push({
		nameCompany: nameCompany,
		emailCompany: email
	});
}


function intFirebase () {

	/*CURRENT USER*/
	firebase.auth().onAuthStateChanged(function(user) {
		if (user != null) {
			console.log(user);
			console.log('El UID es '+user.uid);
		} else {
			console.log('No user is signed in.');
		}
	});
}

window.onload = function() {
	intFirebase();
}
&#13;
&#13;
&#13;

和数据库规则

&#13;
&#13;
{
  "rules": {
    "users_company": {
      "$uid": {
        ".read": "auth != null && auth.uid === $uid",
        ".write": true,
          //Change this code to: I can not do scripts in the database. -> ".write": "auth != null && auth.uid === $uid",
        "nameCompany" : {
        	".validate": "newData.isString() && newData.val().length < 100"
        },
        "emailCompany" :{
        	".validate": "newData.isString() && newData.val().length < 100"
        }
      }
    }
  }
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

在你的intFirebase函数中,如果当前用户已经登录,你只调用你的数据库。你的电子邮件工作的原因,只是因为你看到用户确实是在使用'user.email'登录。

如果您正在尝试创建一个新用户(我认为这是您顶层的事件监听器正在尝试做的事情),那么您应该在提交表单时将添加功能移动到触发状态。