将用户数据存储到Firebase最终会存储错误的用户
嗨,我正在尝试在创建用户时存储用户信息,但是使用这个js代码,它会获取第一个注册用户的数据,而不是刚刚创建的用户将用户数据存储到Firebase最终会存储错误的用户,firebase,firebasesimplelogin,Firebase,Firebasesimplelogin,嗨,我正在尝试在创建用户时存储用户信息,但是使用这个js代码,它会获取第一个注册用户的数据,而不是刚刚创建的用户 var ref = new Firebase("https://***.firebaseio.com/"); $('.btn').click(function(e) { var isNewUser = true; e.preventDefault() var mail = $('#inputEmail').val(); var pass = $('
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
});
您的代码只是在创建新用户,但用户不会自动登录。引述: 创建帐户将不会登录该新帐户 因此,在创建新帐户时,
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);
}
}))
因为,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
。如果这还不足以满足您的用例,您可以继续使用第一个代码段。您的代码只是在创建新用户,但用户不会自动登录。引述:
创建帐户将不会登录该新帐户
因此,在创建新帐户时,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);
}
}))
因为,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
。如果这还不足以满足您的用例,您可以继续使用第一个代码片段。回答得很好!“onAuth事件仅在用户登录后激发。”--不完全正确,onAuth()
在身份验证状态更改时激发。在侦听器第一次连接后,它还将以初始状态(可能是null
)触发。回答得很好!“onAuth事件仅在用户登录后激发。”--不完全正确,onAuth()
在身份验证状态更改时激发。在侦听器第一次连接后,它还将以初始状态(可能是null
)触发。