2017-05-05 43 views
3

我嘗試進行Firebase身份驗證時遇到了非常奇怪的行爲,更多的是我創建了一個可以正常工作的版本,而另一個則沒有。 First ,該版本的作品:Firebase身份驗證因auth/network-request-failed失敗網絡錯誤(例如,超時

<!doctype html> 
<html> 
<head> 
<script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js"></script> 
<script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-auth.js"></script> 
<script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-database.js"></script> 
<script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js"></script> 
<script src="https://www.gstatic.com/firebasejs/3.9.0/firebase.js"></script> 
<script> 

// Initialize Firebase 
var config = { 
    apiKey: "AIzaSyDapkNCu9UwitvO84PwQHnUQ6e4g6UK7JM", 
    authDomain: "********.firebaseapp.com", 
    databaseURL: "https://*******.firebaseio.com", 
    projectId: "********", 
    storageBucket: "********.appspot.com", 
    messagingSenderId: "582605565305" 
}; 

    firebase.initializeApp(config); 
</script> 
</head> 


<body> 
<script> 
    firebase.auth().signInWithEmailAndPassword("[email protected]", "mypassword").catch(function(error) { 
// Handle Errors here. 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    alert(errorCode + " " + errorMessage); 
// ... 
}); 

</script> 

</body> 
</html> 

現在不工作,給我這個問題的標題所述的錯誤版本

<!doctype html> 
<html> 
<head> 
    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-auth.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-database.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase.js"></script> 

<script> 
// Initialize Firebase 
var config = { 
    apiKey: "AIzaSyDapkNCu9UwitvO84PwQHnUQ6e4g6UK7JM", 
    authDomain: "**********.firebaseapp.com", 
    databaseURL: "https://*********.firebaseio.com", 
    projectId: "**********", 
    storageBucket: "**********.appspot.com", 
    messagingSenderId: "582605565305" 
}; 
    firebase.initializeApp(config); 
</script> 

<script src="myfirebase.js"></script> 
</head> 

<body> 
<form name="myform"> 
    <span class="prm">Email</span><input type="text" name="email"></br> 
    <span class="prm">Password</span><input type="password" name="password" ></br> 
    <input type="image" src="some.png" onClick="loginToFirebase();"> 
</form> 

</body> 
</html> 

而且myfirebase.js

function loginToFirebase(){ 
    var myform = document.forms.myform; 
    if(myform){ 
    alert("trying to log as:" + myform.email.value + " and:" + myform.password.value); 
    firebase.auth().signInWithEmailAndPassword(myform.email.value, myform.password.value).catch(function(error) { 
    // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     alert(errorCode + " " + errorMessage); 
    // ... 
    }); 
} 
} 

正如你可以看到它是一個非常簡單的例子,兩個版本都差不多。唯一的區別是,在工作版本中,電子郵件和密碼被硬編碼到源代碼中,但在非工作版本中,有一個HTML表單和一個小的JavaScript。 我把警報聲明,以確保一切按預期工作。

這裏是最奇怪的事情。這兩個版本都適用於Firefox,但不適用於Chrome,Opera和Konqueror(我在Linux/Fedora24上工作)。顯示相同的auth/network-request-failed A network error (such as timeout, interrupted connection or unreachable host) has occurred.

Firebase控制檯顯示工作版本確實有效。

我清除了Chrome緩存,但沒有結果。

Can anyne help me?

回答

5

已解決!

我意識到它有一些內容安全策略,嘗試了各種選項,這裏是解決方案。 首先,而非內聯

onClick="loginToFirebase();" 

我不得不註冊事件偵聽器

function initApp(){ 
    document.getElementById('mybutton') 
     .addEventListener('click', loginToFirebase); 
} 

window.onload = function() { 
    initApp(); 
} 

這不是我的問題結束,試圖指定內容安全策略,但沒有結果。

在徹底查看Firebase演示代碼後,我決定刪除<form>標記,就是這樣!

希望,它會幫助別人:)

+0

其實它的工作原理!謝謝 –