Javascript 使用Internet Explorer 11登录firebase是不可能的

Javascript 使用Internet Explorer 11登录firebase是不可能的,javascript,authentication,firebase,internet-explorer-11,Javascript,Authentication,Firebase,Internet Explorer 11,我有一个简单的自定义登录页面,使用firebase。基本上有一个管理页面,javascript在其中检查当前用户是否经过身份验证。如果没有,它将被重定向到一个登录页面,经过身份验证后,该页面将返回到原始的管理员页面 这是检查身份验证的脚本: <script type="text/javascript"> var ref = new Firebase("firebase.linkishere.com ?>"); var authData = ref.get

我有一个简单的自定义登录页面,使用firebase。基本上有一个管理页面,javascript在其中检查当前用户是否经过身份验证。如果没有,它将被重定向到一个登录页面,经过身份验证后,该页面将返回到原始的管理员页面

这是检查身份验证的脚本:

       <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;")
}
所有这些在chrome、firefox、MicrosoftEdge上都能正常工作,但由于某些原因,在InternetExplorer11上,它无法保持身份验证。我输入了我的详细信息,firebase接受了它,但随后它跳回登录页面,并带有一个控制台日志:我没有经过身份验证

这就像internet explorer在刷新页面或重定向页面后不记得身份验证状态一样


我错过了什么?

嗯。。。我已经在运行IE11的不同计算机上测试了相同的应用程序,并且运行良好。我猜我自己的电脑上有个坏咒语什么的(

嗯……我已经在运行IE 11的不同计算机上测试了同一个应用程序,它运行得很好。我猜我自己的计算机上有一个坏咒语或其他东西(

我在IE11中发现了完全相同的问题,出于某种原因,这似乎是浏览器和Firebase服务器之间的防火墙和代理服务器的问题。登录失败时出现
网络错误(例如超时、连接中断或无法访问主机)已发生。
错误。奇怪的是,我可以连接到firebase的数据库端而没有任何问题。在跟踪问题时,IE甚至没有尝试与Google身份验证服务器通信

尝试了许多不同的选项后,成功的一个(有点麻烦)是将
标记放在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>

我在IE11中发现了完全相同的问题,出于某种原因,这似乎是浏览器和Firebase服务器之间的防火墙和代理服务器的问题。登录失败时出现
网络错误(例如超时、连接中断或无法访问主机)已发生。
错误。奇怪的是,我可以连接到firebase的数据库端而没有任何问题。在跟踪问题时,IE甚至没有尝试与Google身份验证服务器通信

尝试了许多不同的选项后,成功的一个(有点麻烦)是将
标记放在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>

第一个建议是在web技术出现问题时打开shell。打开shell,键入ipconfig flush dns以清除浏览器中所有与web相关的cookie。第二个建议是,您必须进入windows服务并向下滚动,直到找到万维网发布服务,该服务允许将数据传输到未经授权的外包数据库与windows关联。将其重新打开。您正在使用windows测试web应用程序,并且您可能正在使用诸如xampp或wamp之类的服务器。我猜。安装这些服务器应用程序时,要么他们将关闭,要么您将关闭。IE在某些计算机或windows版本中,这取决于它。遗憾的是,您将不得不关闭您的服务器,将servrce设置为on,以便IE的安全设置不会捕捉到这一点。通常xampp是问题所在。如果不同时运行这两个选项,您就无法使用Firebase进行测试。Windows不喜欢Google,有时它们会发生冲突。请使用Chrome或获取另一个使用vm的服务器应用程序。

第一个建议是在出现web技术问题时打开shell。打开外壳程序,键入ipconfig flush dns以从浏览器中清除所有与web相关的Cookie。第二个=您必须进入windows服务并向下滚动,直到找到万维网发布服务,该服务允许将数据传输到与windows不相关的外包数据库。。重新打开它。您可以使用windowsst您的web应用程序,您可能正在使用诸如xampp或wamp之类的服务器。我猜。在安装这些服务器应用程序时,要么它们将关闭,要么您将关闭。IE在某些计算机或Windows版本中的安全设置取决于它。遗憾的是,您将不得不关闭服务器,将servrce设置为打开,以便IE的安全设置不会被捕获这是个问题。通常xampp是个问题。如果不同时运行两者,你就无法使用Firebase进行测试。Windows不喜欢谷歌,有时它们会发生冲突。使用Chrome或使用另一个使用虚拟机的服务器应用。

internet explorer很老了……我只是说。这些天从来没有见过有人使用它,我不会用棍子碰ie,但你知道……internet explorer是旧的…我只是说。这些天从来没见过有人使用它,,我不会用棍子碰ie,但你知道…哦,忘了提一下,如果你只使用Java而没有服务器,你可能仍然需要安装Microsoft 2008可再发行包,因为你需要万维网发布服务来外包数据。只要确保哦,忘了提一下,如果你只使用Java而没有服务器,你可能仍然需要安装Microsoft 2008可再发行软件包,因为你需要万维网发布服务来外包数据。只需确保它是打开的。
if (err.code === 'auth/network-request-failed') {
  var uri = '/login.html?user='
    + encodeURI(email).replace('@', '%40') + '&pass=' + encodeURI(password);

  window.location.replace(uri);
}