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イベントは新しいアカウントが作成されたときに発生するのではなく、ユーザーがログイン (またはログアウト) したときにのみ発生します。

バージョン 2.0.5 より前の Firebase JavaScript ライブラリでは、新しく作成されたユーザーをプログラムでログオンして、ユーザーの にアクセスする必要がありました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以降、はコールバック関数にも 2 番目の引数として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、テスト中に最後のスニペットでしか得られません。それがユースケースに十分でない場合は、最初のスニペットに固執することができます。

于 2014-12-24T13:19:02.883 に答える