2017-10-18 7 views
0

Création d'un formulaire de connexion et d'inscription de base à l'aide de javascript et jQuery avec authentification par email/mot de passe firebase.Enregistrement de l'utilisateur et connexion à l'aide de l'erreur firebase "Reference.push failed: second argument doit être une fonction valide"

Cependant, je reçois cette erreur « Reference.push a échoué: deuxième argument doit être une fonction valide » dans ma console @ cette ligne

database.ref().push(emailnew, passwordnew); 

J'ai cherché ici sur stackoverflow et à l'intérieur du firebase docs pour voir comment corriger ce problème, mais je viens les mains vides. Je pense aussi que mon fichier JS pourrait avoir plus de choses que nécessaire mais je ne suis pas sûr de savoir comment le simplifier. En ce moment, rien n'est poussé vers la base de données. Je ne suis pas complètement familier avec Firebase donc tous les conseils supplémentaires seraient incroyablement utiles, merci.

Idéalement, en cas de création ou de connexion réussie d'un nouveau compte utilisateur, cette page d'accueil redirige l'utilisateur vers la page d'application réelle.

Voici le formulaire HTML

Inscription

 <div class="field-wrap"> 
     <label> 
      Name<span class="req">*</span> 
     </label> 
     <input type="name" id="name" required autocomplete="off"/> 
     </div> 

     <div class="field-wrap"> 
     <label> 
      Email Address<span class="req">*</span> 
     </label> 
     <input type="email-signup" id="emailSignup" required autocomplete="off"/> 
     </div> 

     <div class="field-wrap"> 
     <label> 
      Set A Password<span class="req">*</span> 
     </label> 
     <input type="password-signup" id="passwordSignup" required autocomplete="off"/> 
     </div> 

     <button type="" id="signupbutton" />Get Started</button> 



    </div> 
    <!-- User Login Form --> 
    <div id="login"> 
     <h1>Welcome</h1> 


     <div class="field-wrap"> 
     <label> 
      Email Address<span class="req"></span> 
     </label> 
     <input type="emailLogin" id="emailLogin" required autocomplete="off"/> 
     </div> 

     <div class="field-wrap"> 
     <label> 
      Password<span class="req"></span> 
     </label> 
     <input type="passwordLogin" id="passwordLogin" required autocomplete="off"/> 
     </div> 

     <p class="forgot"><a href="#">Forgot Password?</a></p> 

     <button class="button button-block" id="login" />Log In</button> 

     <div id=loginmessage> 
     </div> 

Voici mon user.js fichier avec intergration firebase comme suit:

 // Initialize Firebase 
     var config = { 
     apiKey: 'AIzaSyBU1fYqhQrVskqgA0Okr3ZStPfYz0s3QWQ', 
     authDomain: "https://lackluster-5966e.firebaseapp.com", 
     databaseURL: 'https://lackluster-5966e.firebaseio.com', 
     projectId: "lackluster-5966e", 
     storageBucket: 'https://lackluster-5966e.appspot.com', 
     messagingSenderId: "489067404953" 
     }; 
     firebase.initializeApp(config); 


     // var firebaseref = new Firebase("https://lackluster-5966e.firebaseapp.com"); 
     var database = firebase.database(); 
     var auth = firebase.auth(); 
     var user = firebase.auth().currentUser; 
     console.log(config); 

    var emailnew; 
    var passwordnew; 

    //Collect User Data from Signup 
    $("#signupbutton").click(function(event){ 
      event.preventDefault(); 
    emailnew = $("#emailSignup").val(); 
    passwordnew = $("#passwordSignup").val(); 
    database.ref().push(emailnew, passwordnew); //Error occurs 
    console.log(emailnew); 
    console.log(passwordnew); 
     }); 

//Creates New User via Firebase Authentication 
var promise = auth.createUserWithEmailAndPassword(emailnew, passwordnew); 
promise.then(function(user) { 
user.sendEmailVerification().then(function() { 
// Email sent. 
}, function(error) { 
// An error happened. 
}); 

//Sends User Info to firebase DB 
user.updateProfile({ 
    Name: name, 
    Email: emailnew 
    }).then(function() { 
    // Update successful. 
    }, function(error) { 
    // An error happened. 
}); 


// Clears all of the text-boxes for user signup 
    $("#emailSignup").val(""); 
    $("#passwordSignup").val(""); 


//User Login Event 
var emailLogin = document.getElementById('emailLogin'); 
var passwordLogin = document.getElementById('passwordLogin'); 

$("#login").click(function(event){ 
     event.preventDefault(); 


var email = emailLogin.value; 
var password = passwordLogin.value; 
var auth = firebase.auth(); 

var promise = auth.signInWithEmailAndPassword(email, password); 
promise.catch(function (e) { 
return console.log(e.message); 
    }); 

// //Page redirect 
// firebase.auth().onAuthStateChanged(user => { 
// if(user) { 
//  window.location = 'index.html'; 
// } 
// else{ 
//  //Do nothing. 
// } 
// }); 

// Authentication Listner 
// Verifies that login credentials are correct otherwise returns error message 
var Message = "<div class=\"loginmessage\">" + "Login Unsuccessful" + "</div>"; 
firebase.auth().onAuthStateChanged(function (firebaseUser) { 
if (firebaseUser) { 
console.log(firebaseUser); 
} else { 
    $('#loginmessage').append(Message); 
console.log('not logged in'); 
} // end else statement 
}); // end function 
}); 

// Clears all of the text-boxes for user login 
    $("#emailLogin").val(""); 
    $("#passwordLogin").val("") 
}); 

Répondre

1

La méthode push attend un objet comme paramètre.

Modifier votre appel à ceci:

// the property names are up to you 
database.ref().push({ email: emailnew, password: passwordnew }); 
+0

Merci! Cela a résolu mon problème d'appel et le journal de la console affiche les valeurs entrées, mais les données entrées ne sont pas remplies dans Firebase. Je pense qu'il y a un problème avec mes appels mais je n'arrive pas à comprendre quel est le problème. – chlc