2016-08-04 127 views
5

我正嘗試使用Firebase和登錄創建註冊表單,我嘗試了很多東西,但無法使用。當我點擊註冊按鈕時,我不斷收到此錯誤,該按鈕調用方法auth.createUserWithEmailAndPassword(email, pass)無法使用Firebase註冊

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

下面,這裏是我的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> 

的一部分,我的JS代碼

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'); 
    } 
    }); 

})(); 
+0

這個應用程序託管在http://noti.stamplayapp.com – Jalasem

+0

我嘗試了錯誤格式的電子郵件和密碼小於8個charcters和火力扔了一個錯誤,但它不會立即登記仍然如果信息正確鍵入 – Jalasem

+0

如果火力地堡是託管的應用程序平臺,您可以通過桌面使用cURL來確定它是否還活着嗎?否則,是否有任何基於Web的控制面板可以登錄以確定您的帳戶/服務器的運行狀況?或者是否有可以使用的客戶支持渠道? – halfer

回答

3

我在使用Firebase的設備登錄時遇到了類似的問題,但我可以在瀏覽器上登錄。我用下面的命令來解決問題,

--cordova插件刪除科爾多瓦 - 插件 - whitelist--

--cordova插件添加科爾多瓦 - 插件 - whitelist--

+1

哇!有用!!謝謝!!! – Jalasem

3

我有同樣的問題也 我解決它的方法是添加域哪裏Firebase應用託管在Firebase控制檯上

+0

你可以提供一些代碼示例嗎? – kabaehr

+0

在您的Firebase控制檯(儀表板)中:console.firebase.google.com,在auth部分下,您可以在那裏添加域 – meedgee

22

雖然此答案不相關螞蟻高於實際的代碼,我懷疑很多人谷歌錯誤:

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

這可能是你的形式實際上是在HTML表單元素。小蟲子,但它可能有巨大的結果。如果您按照本教程進行操作:「https://www.youtube.com/watch?v=-OKrloDzGpU」,請確保您的表單沒有<form></form>標記。這會導致這個錯誤!

+2

爲什麼會出現在表單標籤中會導致問題?無疑大多數人通過表單註冊? –

+0

這是正確的答案。改變

解決了這個問題。 –

+0

我同意。它從

更改爲
它解決了我的問題 –

2

我的解決方案是在Firefox中試用它。我不知道爲什麼,但我也在Chrome中遇到錯誤。你應該嘗試一下。 此致敬禮。

+0

這裏一樣的東西!有人可以解釋這種行爲嗎? –

2

如果您正在使用科爾多瓦(我不知道你是否是,但一些答案意味着你可能),包括cordova-plugin-network-information糾正這個問題給我。我確認'navigator.onLine'有時是'虛假'的,我相信這會導致Firebase認爲存在問題。一旦我將cordova-plugin-network-information添加到我的項目中,問題就消失了。我沒有深入研究爲什麼,但我懷疑這個插件對導航器有更好的包裝,這可能會給Firebase提供更好的信息。我確實在移除插件後確認了這個問題,但重新應用它可以修復它。如果我深入挖掘,我會更新它。我希望這有幫助。

+1

這解決了它在一個全新的xperia我正在使用作爲試驗檯,感謝! – psimons

0

這是什麼解決了我的問題(這是一個移動應用程序)。我無法在我的html中使用標籤。正如前面的答案中所建議的那樣,我將它改爲了div。我還需要關閉我的鍵盤。我正在使用離子鍵,需要安裝離子鍵盤。在我的登錄功能之前,我添加了this.keyboard.close(),並開始工作。如果你不使用離子,你可以嘗試科爾多瓦插件或類似的東西。希望這可以幫助。

2

在我的情況下,如果您嘗試重新連接到Internet,則問題得以解決。

+0

這似乎不是答案。你應該評論這一點。 – Rumit

+1

好吧,這是我的答案... – Coluccini

0

我通過禁用作爲create-react-app一部分的服務工作者來解決它。服務工作人員在生產中並通過https進行初始化。在此之後,我發生了Firebase錯誤。這個問題在這裏詳細描述:https://github.com/firebase/firebase-js-sdk/issues/22

細則禁用服務人員可以在這裏找到在「選擇退出緩存的」:https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#making-a-progressive-web-app

問題可能會在以後的更新解決了創建反應的應用程序內或火力。