2016-03-05 87 views
1

我有一個簡單的自定義登錄頁面,使用Firebase。基本上有一個管理頁面,JavaScript正在檢查當前用戶是否通過身份驗證。如果沒有,它將被重定向到一個登錄頁面,在認證後將返回到原來的管理員的東西。無法使用Internet Explorer 11登錄到Firebase

這是檢查驗證的腳本:

 <script type="text/javascript"> 
var ref = new Firebase("firebase.linkishere.com ?>");  

var authData = ref.getAuth(); 
if (authData) { 
    console.log("User is authenticated!"); 
    document.getElementById("container").style.display = "block"; 
} else { 
    var login = "login.php"; 
    window.location.href = login; 
    console.log("I'm not authenticated;") 
} 

,這是在登錄頁面上的腳本:

$('#signIn').on("click", function(){ 
var username = $("#username").val(); 
var password = $("#password").val(); 

    ref.authWithPassword({ 
    email : username, 
    password : password 
    }, 

    function(error, authData) { 
    if (error) { 
    switch (error.code) { 
     case "INVALID_EMAIL": 
     errorMessage.innerHTML = "The specified user account email is invalid." 
     console.log("The specified user account email is invalid."); 
     break; 
     case "INVALID_PASSWORD": 
     errorMessage.innerHTML = "The specified user account password is incorrect." 
     console.log("The specified user account password is incorrect."); 
     break; 
     case "INVALID_USER": 
     errorMessage.innerHTML = "The specified user account does not exist." 
     console.log("The specified user account does not exist."); 
     break; 
     default: 
     errorMessage.innerHTML = "Error logging user in" 
     console.log("Error logging user in:", error); 
    } 
    } else { 
    console.log("Authenticated successfully with payload:", authData); 
    window.location.href = "index.php"; 
    remember: "sessionOnly" 
    } 
    }); 
}); 

這一切適用於Chrome罰款,火狐,微軟優勢,但對於在Internet Explorer 11上的一些原因,它不會保持身份驗證。我輸入我的詳細信息,firebase接受它,但隨後它跳回到登錄頁面,並顯示一個控制檯日誌:我沒有通過身份驗證。

這就像Internet Explorer將不記得頁面刷新後,或重定向後的身份驗證狀態。

我錯過了什麼?

+0

互聯網探險家是老...我只是說。從來沒有見過任何人使用這些天, – amanuel2

+0

我不會用棒觸摸,但你知道... –

回答

0

那麼...我已經在運行IE 11的不同計算機上測試過相同的應用程序,並且運行正常。我猜測我自己的電腦對它有什麼不好的咒語。 :(

0

我在IE11中發現了完全相同的問題,出於某種原因,它似乎是瀏覽器和Firebase服務器之間的防火牆和代理服務器的問題。登錄失敗,出現A network error (such as timeout, interrupted connection or unreachable host) has occurred.錯誤。可以在沒有任何問題的情況下連接到firebase的數據庫端當追蹤問題時,IE甚至不嘗試與Google身份驗證服務器通信

嘗試了很多不同的選項後, )將一個<meta http-equiv="X-UA-Compatible" content="IE=10" />標記放置在HTML頁面上的HEAD標記後面,當登錄並獲取錯誤時,將頁面重定向到其模式設置爲IE9的頁面,並使用查詢參數登錄,如下所示:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
    <meta charset="UTF-8"> 
    <title>Login</title> 
</head> 
<body> 
    <script src="/js/shims.js"></script> 
    <script src="https://www.gstatic.com/firebasejs/3.6.2/firebase.js"></script> 
    <script> 
    (function() { 
    var config = { 
     apiKey: '<your keys>', 
     authDomain: '<your keys>', 
     databaseURL: '<your keys>', 
     storageBucket: '<your keys>', 
     messagingSenderId: '<your keys>' 
    }; 
    firebase.initializeApp(config); 

    function getParameterByName(name, url) { 
     if (!url) 
     url = window.location.href; 
     name = name.replace(/[\[\]]/g, "\\$&"); 
     var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"); 
     var results = regex.exec(url); 
     if (!results) return null; 
     if (!results[2]) return ''; 
     return decodeURIComponent(results[2].replace(/\+/g, " ")); 
    } 

    firebase.auth().onAuthStateChanged(function(user) { 
     if (user) 
     window.location.replace('/'); 
     else { 
     firebase.auth() 
     .signInWithEmailAndPassword(
      getParameterByName('user'), 
      getParameterByName('pass') 
     ) 
     .then(function() { 
      window.location.replace('/'); 
     }) 
     .catch(function(error) { 
      console.log(error); 
     }); 
     } 
    }); 

    }()); 
    </script> 
</body> 
</html> 

您會注意到,這將重定向頁面,當用戶已登錄,你也將需要相當該網頁,並將處理不正確的密碼等

的代碼來調用這個頁面應該看起來類似於:

if (err.code === 'auth/network-request-failed') { 
    var uri = '/login.html?user=' 
    + encodeURI(email).replace('@', '%40') + '&pass=' + encodeURI(password); 

    window.location.replace(uri); 
} 
相關問題