gpt4 book ai didi

javascript - 无法将用户数据写入 firebase

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:19 25 4
gpt4 key购买 nike

我是新手,所以请多多包涵。我正在尝试使用带有电子邮件和密码的 fire base 简单登录。我有这个工作:

var authClient = new FirebaseAuthClient(fireRef, function(error, user) {
if (error) {
// an error occurred while attempting login

if(error.code === "INVALID_EMAIL"){
$('#log_email_error').hide();
$('#log_pass_error').hide();
$('#log_email_error').html("Invalid email specified.").fadeIn();
$('.login_button').removeClass('login_button_success').attr('value','Log in');
}
if (error.code === "INVALID_PASSWORD") {
$('#log_email_error').hide();
$('#log_pass_error').hide();
$('#log_pass_error').html("The specified password is incorrect..").fadeIn();
$('.login_button').removeClass('login_button_success').attr('value','Log in');
}


console.log(error);
} else if (user) {
// user authenticated with Firebase
hideLogin();
$('.userInfo_cont').show();
$('.userInfo').html('<div> '+ user.email + ' <span class="grey">| </span> </div>');
$('.logout').on('click',function(){
authClient.logout();
});

console.log('User ID: ' + user.id + ', Provider: ' + user.provider);

} else {
// user is logged out
$('.userInfo_cont').hide();
showLogin();
}
});

但是当用户注册时我想在 firebase/users 区域存储一些额外的信息我可以在注册中这样做:

$('#submit_reg').on('click',function(){
var firstName = $('#regFirstname').val();
var lastName = $('#regLastname').val();
var email = $('#regUsername').val();
var password = $('#regPassword').val();

authClient.createUser(email, password, function(error, user) {
if (!error) {
console.log('User Id: ' + user.id + ', Email: ' + user.email);

authClient.login('password', {
email: email,
password: password,
rememberMe: false
});


hideLogin();


userInfo = {

userId : user.id,
firstName : firstName,
lastName : lastName,
email : user.email

}

var url = USERS_LOCATION + "/" + user.id;
var userRef = new Firebase(url);

console.log(userInfo);

userRef.set(userInfo);



}else{
//display error

alert(error);

}
});



});

我的问题是当我像文档那样实现读写规则时:

{
"rules": {
"users":{
"$userid": {
".read": "auth.id == $userid",
".write": "auth.id == $userid"
}
}
}
}

当用户注册时,我得到一个被拒绝的权限。因此它可以很好地注册用户,但不会将附加数据写入/users/id 区域。

如有任何帮助,我们将不胜感激。

克雷格

最佳答案

在上面的代码片段中,您调用了 login(),然后立即调用了 set()。这是有问题的,因为 login() 方法是异步的,并且几乎总是可以保证在返回登录尝试方法之前调用了 set() 方法,因为login() 是非阻塞的,但会向 Firebase 服务器发出网络调用。

这意味着即使您使用正确的电子邮件和密码调用 login(),您仍会尝试在身份验证过程完成之前设置数据。

我建议将您的 set() 逻辑移动到一个 block 中,只有当您确定用户已经通过身份验证时才会执行该 block ,例如在您调用 时传递的回调中new FirebaseAuthClient() 并检测到登录用户。

关于javascript - 无法将用户数据写入 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com