2017-10-03 3 views
-3

私はこのfirebase web appに本当に疲れました。簡単に言うと、私はfirebasedatabaseに "USER ID /(user.uid)"に依存するデータを書き込むことはできません。以下のコードスニペットは機能しません。どうしましたか?Firebase Web JS:userID(uid)に従ってデータを書き込む方法は? |ユーザー> uid> {名前、メールなど}

このエラーが発生します。 「キャッチされていないにReferenceError:ユーザーは、index.htmlをで が定義されていない:あなたはそれがない場所でuser変数を使用しようとしている206

<script> 
    var config = { 
     apiKey: 
     authDomain: 
     databaseURL: 
     projectId: 
     storageBucket: 
     messagingSenderId: 
    }; 
    firebase.initializeApp(config); 

    initApp = function() { 
     firebase.auth().onAuthStateChanged(function (user) { 
      if (user) { 
       // User is signed in. 
       var email = user.email; 
       var uid = user.uid; 
       var providerData = user.providerData; 
       user.getIdToken().then(function (accessToken) { 
        document.getElementById('LogOut').textContent = 'Log out'; 
        var DT = JSON.stringify({ 
         displayName: displayName, 
         email: email, 
         emailVerified: emailVerified, 
         phoneNumber: phoneNumber, 
         photoURL: photoURL, 
         uid: uid, 
         accessToken: accessToken, 
         providerData: providerData 
        }, null, ' '); 

        console.log(DT); 

       }); 
      } else { 
       // User is signed out. 
       document.getElementById('LogOut').textContent = 'Log in'; 
      } 
     }, function (error) { 
      console.log(error); 
     }); 
    }; 


    function signOut() { 
     firebase.auth().signOut(); 
    } 
    document.getElementById("LogOut").addEventListener("click", signOut); 

    window.addEventListener('load', function() { 
     initApp() 


    }); 

    var userId = user.uid; 
    var email = user.email; 

    function writeUserData(userId, email) { 
     firebase.database().ref('users/' + userId).set({ 
      username: userId, 
      email: user.email 

     }); 
    } 

    document.getElementById("submitBtn").addEventListener("click", writeUserData); 

</script> 

答えて

0

:index.htmlを@ 206 (匿名) 。定義されたuser変数がonAuthStateChangedコールバックでのみ利用可能であることは、あなたがコールバックそのに変数userを必要とするすべてのコードを移動する必要があることを意味します。

initApp = function() { 
    firebase.auth().onAuthStateChanged(function (user) { 
     if (user) { 
      // User is signed in. 
      var email = user.email; 
      var uid = user.uid; 
      firebase.database().ref('users/' + uid).set({ 
       username: uid, 
       email: user.email 
      }); 
      var providerData = user.providerData; 
      user.getIdToken().then(function (accessToken) { 
       document.getElementById('LogOut').textContent = 'Log out'; 
       var DT = JSON.stringify({ 
        displayName: displayName, 
        email: email, 
        emailVerified: emailVerified, 
        phoneNumber: phoneNumber, 
        photoURL: photoURL, 
        uid: uid, 
        accessToken: accessToken, 
        providerData: providerData 
       }, null, ' '); 

       console.log(DT); 

      }); 
     } else { 
      // User is signed out. 
      document.getElementById('LogOut').textContent = 'Log in'; 
     } 
    }, function (error) { 
     console.log(error); 
    }); 
}; 

目でこのコードを削除します。

var userId = user.uid; 
var email = user.email; 

function writeUserData(userId, email) { 
    firebase.database().ref('users/' + userId).set({ 
     username: userId, 
     email: user.email 

    }); 
} 
関連する問題