2017-02-03 7 views
0

新しいユーザーにサインアップして(authで)、それらの名前とその他の情報をリアルタイムDBのユーザーリストデータベースに追加したいと考えています。私は何が間違っているのか分かりません。認証は素晴らしいですが、新しいユーザーはDBに追加されていません。ユーザーを認証してDBを同時に追加する

以下のコードでは、それらを登録してDBに名前を追加し、確認メールを送信します。

function handleRegister() { 
    var ref = firebase.database().ref(); 
    console.log(email); 
    console.log(fname); 

     if (email.length < 4) { 
     alert('Please enter an email address.'); 
     return; 
     } 
     if (password.length < 4) { 
     alert('Please enter a password.'); 
     return; 
     } 

     firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) { 


     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     var uid = firebase.auth().currentUser.uid; 
     // [START_EXCLUDE] 
     if (errorCode == 'auth/weak-password') { 
     alert('The password is too weak.'); 

      firebase.auth().onAuthStateChanged(user => { 
     if(user) { 

       var postData = { 
       Fullname: fname + lname, 
        email: email, 
       }; 

       // Write the new post's data simultaneously in the posts list and the user's post list. 
       var updates = {}; 
       updates['/Users/' + uid ] = postData; 

       return firebase.database().ref().update(updates); 

     } 
     }) 
     } else { 
     console.log(error); 

    } 

    }) 

認証と送信電子メールの検証はうまく機能しますが、名前はDBに追加されません。また、認証を得るためのより良いアプローチがある場合は、DBに追加して電子メールの確認を送信してください、私に教えてください。助けてください。

これは、更新に加え

var addusertoDB = function(user){ 

      var uid = firebase.getAuth().uid; 
      var postData = { 
      Firstname: fname, 
      Lastname: lname, 
      email: email, 
      } 
      // Get a key for a new Post. 
      var newPostKey = firebase.database().ref().child('Users').push().uid 
      // Write the new post's data simultaneously in the posts list and the user's post list. 
      var updates = {}; 
      updates['/Users/' + newPostKey] = postData; 
      // updates['/user-posts/' + '/' + newPostKey] = postData; 
      return firebase.database().ref().update(updates); 
    } 

で、登録ハンドルが

firebase.auth().createUserWithEmailAndPassword(email, password).then(


     addusertoDB).catch(handleCreateUserError); 

に更新されている、それは最終的にDB(UIDなし)が、firebase.getAuth()に追加されています。UID uidを取得していません。私が得ているエラーは "firebase.getAuthは関数ではありません"

+1

'キャッチ()は、'エラー処理のために使用されているが....あなたはこの内部 'その後、()'ではない 'キャッチ()' – charlietfl

+0

[OK]を実行する必要があります、私はキャッチを交換しますか?、申し訳ありません。私はfirebaseで本当に新しいです。あなたは正しい形式を投稿するのを手伝ってくれますか? – Ola

答えて

1

catch()に渡したのと同じ関数でエラーとユーザー更新の両方を処理しようとしています。つまり、その関数内のコードは、firebase.auth().createUserWithEmailAndPassword(email, password)が失敗した場合にのみ実行されます。 firebaseドキュメントから

null以外firebase.User

を含む

createUserWithEmailAndPassword

createUserWithEmailAndPassword(email, password)戻り firebase.Promiseは、指定したメールアドレス とパスワードに関連した新しいユーザーアカウントを作成します。

ユーザーアカウントの作成に成功すると、このユーザーはアプリケーションに もサインインします。

これは、ユーザーが正常に作成にあなたがthen()に渡されたコールバックを経由して、新規ユーザーへのアクセス権を持っていることを意味します。

あなたは、おそらくこのような何かしたい:

var doSomethingWithNewUser = function(user) { 
    // Manipulate the newly created User however you like here. 
    // You don't have to sign them in again. 
}; 

var handleCreateUserError = function(error) { 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    // Do whatever you want with the error codes. 
}; 

firebase.auth().createUserWithEmailAndPassword(email, password) 
    .then(doSomethingWithNewUser) 
    .catch(handleCreateUserError); 
+0

あなたのコードが作成された後にあなたのコードを更新しようとしているように見えるのはどうしてわかりますか? - あなたのシステムにユーザが登録されていれば、データベースのUserテーブルにすでに存在しているはずです。 –

関連する問題