我正在尝试在创建用户时存储用户信息,但是使用此js代码,它会获取刚刚创建的用户的第一个注册用户数据。
var ref = new Firebase("https://***.firebaseio.com/");
$('.btn').click(function(e) {
var isNewUser = true;
e.preventDefault()
var mail = $('#inputEmail').val();
var pass = $('#inputPassword').val();
ref.createUser({
email : mail,
password : pass
}, function(error) {
if (error === null) {
console.log("User created successfully");
} else {
console.log("Error creating user:", error);
}
ref.onAuth(function(authData) {
if (authData && isNewUser) {
ref.child("users").child(authData.uid).set(authData);
}
});
});
return false; //Extra insurance
});
答案 0 :(得分:4)
您的代码只是创建新用户,但用户不会自动登录。引用Firebase documentation on creating user accounts:
创建帐户不会记录新帐户。
因此,onAuth
事件会在创建新帐户时触发不,但只有在用户登录(或注销)后才会触发。
在Firebase JavaScript库的2.0.5版之前,您必须以编程方式记录新创建的用户以访问其authData
。你的代码没有这样做。
您可以通过在 回调中记录用户并设置用户数据来解决此问题:
ref.createUser({
email : mail,
password : pass
}, function(error) {
if (error === null) {
ref.authWithPassword({ email: mail, password: pass }, function(error, authData) {
if (authData) {
ref.child("users").child(authData.uid).set(authData);
}
ref.unauth();
});
} else {
console.log("Error creating user:", error);
}
});
从version 2.0.5开始,authData
也作为第二个参数传递给createUser
回调函数。所以你也可以这样做:
ref.createUser({
email : mail,
password : pass
}, function(error, authData) {
if (error === null) {
console.log("User created successfully");
if (authData) {
ref.child("users").child(authData.uid).set(authData);
}
} else {
console.log("Error creating user:", error);
}
});
奇怪的是,在测试时,我只得到最后一个片段的uid
。如果这不足以满足您的用例,您可以坚持使用第一个代码段。