kkkk
kkkk

Reputation: 11

firebase - Reference.set failed: First argument contains undefined in property 'users.undefined.profileImageUrl'

I have tried many methods to get the user data store by the user.uid but all I'm getting is the data is being stored under "undefined". enter image description here

enter image description here

var displayName;
var userInfo;
var profile_url;

   $("#login-btn").click(function(){
     userInfo = firebase.auth().currentUser;
     if (userInfo) { 
       firebase.auth().signOut(); 
     } else { 
       var email = document.getElementById('login_email').value; 
       var password = document.getElementById('login_pw').value; 
       
       firebase.auth().signInWithEmailAndPassword(email, password).then(function(){
         document.getElementById('login_bar').style.display = "none";
         document.getElementById('logout_bar').style.display = "inline-block"; 
         document.getElementById('userinfo_bar').style.display = "inline-block"; 
         document.getElementById('secession_bar').style.display = "inline-block";
         alert("login success");
         location.replace('board.html');
       }).catch(function(error) {

         var errorCode = error.code;
         var errorMessage = error.message;

         if (errorCode === 'auth/wrong-password') {
           alert('wrong-password.');
         }

         else {
           alert(errorMessage);
         }
         console.log(errorMessage);
         
       }); 


     } 
 
   });

   $("#join-btn").click(function(){ 
     var email = document.getElementById('join_email').value;
     var password = document.getElementById('join_pw').value;
     var displayName = document.getElementById('join_name').value;
     var job = $('input[name=job]:checked').val();
  
    firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {

      var u_Ref = firebase.database().ref('users/' + user.uid);
     
      userInfo = user;

      u_Ref.set({
        'email' : email,
        'job': job,
        'profileImageUrl':profile_url,
        'uid' : user.uid,
        'username': displayName
      });


        handleFileSelect(); 
        alert("join success");

    }, function(error) {
  var errorCode = error.code;
  var errorMessage = error.message;
  alert(error);
});

     if (email.length < 4) {
       alert('x');
       return;
     }
     if (password.length < 4) {
       alert('x');
       return;
     }

    function initApp() {
      firebase.auth().onAuthStateChanged(function(user) {
        if (user) { 
          var displayName = user.displayName;
          var email = user.email;
          var emailVerified = user.emailVerified;
          var photoURL = user.photoURL;
          var isAnonymous = user.isAnonymous;
          var uid = user.uid;
          var providerData = user.providerData;

          user.updateProfile ({
            displayName : displayName,

          }). then (function () {
            console.log ( 'success');
          }). catch (function (error) {
            console.log( 'no');
          });

          userInfo = user;
 
          firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION); 
          document.getElementById('login_bar').style.display = "none";
          document.getElementById('logout_bar').style.display = "inline-block"; 
          document.getElementById('userinfo_bar').style.display = "inline-block";
          document.getElementById('secession_bar').style.display = "inline-block";


          $("#secession_bar").click(function(){
            user.delete().then(function(){ 
              alert('success');
             userRef= firebase.database().ref('users/' + user.uid);
             userRef.remove(); 
             firebase.storage().ref().child('userImages/' + userInfo.uid).delete(); 
            location.reload();
            });
          });

          $("#logout_bar").click(function(){
            firebase.auth().signOut();
            location.reload();
          });

  

        } else { 

          document.getElementById('login_bar').style.display = "inline-block"; 
          document.getElementById('logout_bar').style.display = "none"; 
          document.getElementById('userinfo_bar').style.display = "none";
          document.getElementById('secession_bar').style.display = "none";
       


        } 

      });
    } 

    function handleFileSelect(evt) {
      evt.stopPropagation();
      evt.preventDefault();
      var file = evt.target.files[0];

      var metadata = {
        'contentType': file.type
      };

   
      var storageRef = firebase.storage().ref().child('userImages/' +userInfo.uid);

      storageRef.put(file, metadata).then(function(snapshot) {
        console.log('Uploaded', snapshot.totalBytes, 'bytes.');
        console.log('File metadata:', snapshot.metadata);
        
        snapshot.ref.getDownloadURL().then(function(url) {
          console.log('File available at', url);
          profile_url = url;
   
        });
      }).catch(function(error) {

        console.error('Upload failed:', error);

      });

    } 

Upvotes: 0

Views: 239

Answers (1)

Kian
Kian

Reputation: 314

I spotted a thing in your code, createUserWithEmailAndPassword method returns a promise which is of type UserCredential, an object that contains a structure of credential and user, So you've made a mistake in there by asking of property uid of user (the returned promise) which is non-existence.

it should looks like this:

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(credential) {

      var userInfo = creadential.user;

      var u_Ref = firebase.database().ref('users/' + userInfo.uid);

      u_Ref.set({
        'email' : email,
        'job': job,
        'profileImageUrl':profile_url,
        'uid' : userIfo.uid,
        'username': displayName
      });

Upvotes: 1

Related Questions