0

嗨,我试图在创建用户时存储用户信息,但是使用此 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
});
4

1 回答 1

4

您的代码只是创建新用户,但用户不会自动登录。引用有关创建用户帐户的 Firebase 文档

创建帐户不会登录该新帐户。

因此,在创建新帐户时不会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);
   }

});

2.0.5 版本开始,authDatacreateUser作为第二个参数传递给回调函数。所以你也可以这样做:

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在测试它时只得到了最后一个片段。如果这对您的用例来说还不够,您可以坚持使用第一个片段。

于 2014-12-24T13:19:02.883 回答