2015-09-17 98 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的狀態變化,並且可以在驗證身份驗證時觸發一種方法,以及在未驗證身份驗證時觸發另一種方法。我會給你一個旋轉,看看它是否適合你。