Jalasem
Jalasem

Reputation: 28391

Can't Sign up with firebase

I am trying to create a sign up form with firebase and login as well, I have tried so many things but it won't work. I keep getting this error when I click the signup button which calls the method auth.createUserWithEmailAndPassword(email, pass).

A network error (such as timeout, interrupted connection or unreachable host) has occurred.

Below here is part of my HTML

<div class="col l7" id="signup">
      <h4>Signup</h4>
      <div class="form card">
        <br>
        <div class="switch">
          <label>
                Student
                <input name="student_" id="student_" type="checkbox">
                <span class="lever"></span>
                Staff
              </label>
        </div>
        <div class="container">
          <input type="text" placeholder="Name" id="signup_fullname">
          <!--student/staff-->
          <input type="text" placeholder="Matric Number/Staff no." id="signup_matric">
          <input type="email" placeholder="Email" id="signup_email">
          <div class="input-field col s12">
            <select id="signup_dept">
                  <option value="" disabled selected>Select your department</option>
                  <option value="ics">ICS</option>
                  <option value="masscomm">Mass Comm.</option>
                  <option value="lis">Library Science</option>
                  <option value="tcs">Telecomm Science</option>
                  <option value="csc">Computer Science</option>
                </select>
          </div>
          <div class="input-field col s12">
            <select id="signup_level">
                  <option value="" disabled selected>Select your Level</option>
                  <option value="100">100 Level</option>
                  <option value="200">200 Level</option>
                  <option value="300">300 Level</option>
                  <option value="400">400 Level</option>
                  <option value="500">500 Level</option>
                </select>
          </div>
          <div class="input-field col s12">
            <select id="signup_religion">
                  <option value="" disabled selected>Select your religion</option>
                  <option value="1">Islam</option>
                  <option value="2">Christianity</option>
                </select>
          </div>
          <input type="password" placeholder="password" id="signup_password">
          <!--<input type="password" placeholder="Confirm password" id="signup_confirm_password">-->
          <button class="btn-large second-color" id="btnSignUp">signup</button></a>
        </div>
      </div>
      <br>
    </div>

and my JS code

readystatemode = false;
(function () {
  var config = {
    apiKey: "<my API key>",
    authDomain: "<my auth domain>",
    databaseURL: "<my database url>",
    storageBucket: "<my storage bucket url>",
  };
  firebase.initializeApp(config);

  // Get Elements
  var student_ = document.getElementById('student_'); // check whether is a student or staff; expect on or off
  var student__;
  if (student_.value == "on") {
    student__ = "student";
  } else {
    student__ = "staff";
  }
  var signup_fullname = document.getElementById('signup_fullname');
  var signup_matric = document.getElementById('signup_matric');
  var signup_email = document.getElementById('signup_email');
  var signup_dept = document.getElementById('signup_dept');
  var signup_level = document.getElementById('signup_level');
  var signup_religion = document.getElementById('signup_religion');
  var signup_password = document.getElementById('signup_password');
  var login_email = document.getElementById('login_email');
  var login_password = document.getElementById('login_password');
  // buttons
  var btnLogin = document.getElementById("btnLogin");
  var btnSignUp = document.getElementById("btnSignUp");

  // signup event
  btnSignUp.addEventListener('click', e => {
    // Get Email and pass
    //TODO: check for real emails
    console.log("just clicked the signup button");

    var email = signup_email.value;
    var pass = signup_password.value;
    var auth = firebase.auth();
    // sign up
    const promise = auth.createUserWithEmailAndPassword(email, pass);
    promise
      .catch(e => console.log(e.message));

    if (auth.currentUser != null) {
      auth.currentUser.updateProfile({
        displayName: signup_fullname,
        userCategory: student__,
        matric: signup_matric,
        department: signup_dept,
        level: signup_level,
        religion: signup_religion
      }).then(function () {
        console.log("update successful");
        window.readystatemode = true;
      }, function (error) {
        console.log("update failed");
      });
    }
  });

  firebase.auth().onAuthStateChanged(firebaseUser => {
    if (firebaseUser && window.readystatemode) {
      console.log(firebaseUser);
      btnLogout.classList.remove('hide');
      window.location('./dashboard.html');
    } else {
      console.log("not logged in");
      btnLogout.classList.add('hide');
    }
  });

})();

Upvotes: 6

Views: 12853

Answers (8)

Gabriel Wamunyu
Gabriel Wamunyu

Reputation: 754

I solved it by disabling my ad blocker which in my case was Ghostery. Seems like it's pretty aggressive.

Upvotes: 0

SmelayaPanda
SmelayaPanda

Reputation: 159

In my case, the problem resolved if you try to reconnect to the Internet.

Upvotes: 9

Derek Niemuth
Derek Niemuth

Reputation: 1

Here's what solved the issue for me (this is for a mobile app). I could not use a tag in my html. I changed this to a div as suggested in earlier answers. I also needed to close my keyboard. I am using ionic and needed to install the the ionic native keyboard. Right before my my login function, I added this.keyboard.close() and everything started working. If you are not using ionic, you can try the cordova plugin or something of the equivalent. Hope this helps.

Upvotes: 0

Jason Washo
Jason Washo

Reputation: 615

If you are using Cordova (which I am not sure if you are or not, but some answers imply that you may be), including the cordova-plugin-network-information corrected this issue for me. I confirmed that the 'navigator.onLine' was occasionally 'false', which I believe was causing Firebase to think there was an issue. Once I added the cordova-plugin-network-information to my project, the problem went away. I didn't dig deep into why, but I suspect this plugin has a better wrapper around the navigator which may be giving Firebase better information. I did confirm this problem came back after removing the plugin, but re-applying it fixes it. I will update this if I dig deeper. I hope this helps.

Upvotes: 3

Suhas s
Suhas s

Reputation: 149

I had a similar issue with the device login using Firebase but i could login on the browser. I used the following commands to resolve the issue,

--cordova plugin remove cordova-plugin-whitelist--

--cordova plugin add cordova-plugin-whitelist--

Upvotes: 5

mijares93
mijares93

Reputation: 59

The solution for me was trying it in Firefox. I do not know why, but I also got an error in Chrome. You should try that. Regards.

Upvotes: 2

user2164689
user2164689

Reputation: 377

While this answer is not relevant to the actual code above, I suspect a lot of people google the error:

"A network error (such as timeout, interrupted connection or unreachable host) has occurred."

It might be that your form is actually in a form element in the HTML. Small bug, but it could have huge concequences. If you are following along this tutorial: "https://www.youtube.com/watch?v=-OKrloDzGpU", please make sure your form does not have a <form></form>tag. This will lead to this error!

Upvotes: 28

meedgee
meedgee

Reputation: 31

I had the same problem too The way I solved it was to add the domain where the firebase app is hosted on the firebase console

Upvotes: 3

Related Questions