2015-09-17 55 views
0

使用提供的非常简单的简单示例(Firebase Google Auth)我一直无法从Google获得授权。好吧,我有,但并不总是意味着我实际上已经获得了对象几次...但如果我注销ref.unauth()它不会再工作。高低搜索我一直无法找到其他人经历类似的事情。我必须失去一些东西。我真的不确定在这里分享什么来给予理解。这是我在页面中的所有内容:Firebase Google Auth

<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Contacts</title> 
    <script src='https://cdn.firebase.com/js/client/2.2.1/firebase.js'></script> 


    <script type="text/javascript"> 
     var contactsRef = new Firebase('https://my-notreal-firebaseapp.firebaseio.com/contacts'); 
     var authData = contactsRef.getAuth(); 

     if (authData) { 
      console.log("User " + authData.uid + " is logged in with " + authData.provider); 
     } else { 
      console.log("User is logged out"); 
      contactsRef.authWithOAuthRedirect("google", function(error,authData){ 
       //do stuff post authentication 
      },{ 

       remember: "sessionOnly", 
       scope: "email" 
      }); 
     } 
    </script> 
</head> 
<body> 
</body> 
</html> 

它每次重定向回登录。我有多个Google帐户,因此实际上我需要“选择帐户”页面。我也设置了非常简单的规则。

{ 
    "rules": { 
     "contacts":{ 

       ".read": true, 
       ".write": true 
     } 
     } 
    } 

我仔细检查过,以确保我在Google Developers Console和Firebase应用程序面板中正确设置了所有设置。

在此先感谢您的任何建议!

+0

...和BTW ref.authWithOAuthPopup完美地工作。我很确定这个问题与重定向的错误处理有关。 –

+0

从页面返回后,您是否可以刷新并查看您是否已登录? –

+0

@DavidEast只是回到这...如果你刷新它尝试再次认证。 –

回答

0

我今天偶然发现了同样的问题。问题在于(据我了解):当您使用authWithRedirect时,浏览器会在您前往Google的路上重定向您的网络应用程序,并将其有效地吹走(包括Firebase参考)。

来自Google的往返旅程需要250ms的时间才能加载和接收认证信息。因此,您的应用程序会加载,但不认为它已通过身份验证,因为在加载应用程序时,Firebase ref尚未通过身份验证。

答案是在引导代码中的某处添加onAuth() Firebase方法。 onAuth()将侦听您的Firebase ref的状态变化,并且可以在验证身份验证时触发一种方法,以及在未验证身份验证时触发另一种方法。我会给你一个旋转,看看它是否适合你。