开发者问题收集

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

2016-12-06
109

我的问题是通过从表单中获取信息来将数据添加到数据库。 我想将信息添加为“名称”。我可以正确添加“电子邮件”,但不能添加其他数据。

我的代码:

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();
}

和数据库规则

{
  "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"
        }
      }
    }
  }
}
1个回答

在您的 intFirebase 函数中,只有当前用户已登录时,您才会调用数据库。您的电子邮件之所以有效,只是因为您在看到用户确实已登录后使用了“user.email”。

如果您尝试创建一个新用户(我认为这就是顶部的事件监听器尝试执行的操作),那么您应该将添加函数移至提交表单时触发。

Taylor King
2016-12-06