2017-05-05 32 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

其实它的工作原理!谢谢 –