2016-09-17 99 views
0

我正在研究一個角度應用,並使用Firebase實現註冊和日誌記錄功能。兩種功能都運行良好。登錄頁面渲染值,即使用戶未登錄

現在我遇到的麻煩是onAuthStateChanged()函數。我想要的是一旦用戶登錄,他/她必須能夠看到一條消息,說他們已經登錄。我甚至能夠看到「Hi {{currentUser.firstname}}」,這是我在代碼一旦我登錄,但一旦我刷新頁面並嘗試再次登錄,即使沒有單擊登錄按鈕,我也會看到「Hi {{currentUser.firstname}}」。我不知道怎麼我的登錄頁面渲染,即使我沒有登錄$ rootScope.currentUser價值。我寫了下面的代碼,它

JS

auth.onAuthStateChanged(function(user) { 
      if (user) { 
      // User is signed in. 
      var data = firebase.database().ref('users/' + user.uid); 
      data.on('value', function(snapshot) {  
      var userobj=snapshot.val(); 
      $rootScope.currentUser=userobj; 
     })} else { 
      // No user is signed in. 
      $rootScope.currentUser=' '; 
      } 
     }); 

HTML

<div class="userinfo" ng-show="currentUser"> 
    <span class="userinfo">Hi {{currentUser.firstname}}</span> 
    </div> 

回答

0

該行爲是通過設計。從docs

的火力地堡驗證實例仍然存在用戶的狀態,從而刷新頁面(在瀏覽器),或者重新啓動應用程序不失去用戶的信息。

如果您不希望持久保留用戶的身份驗證狀態,則需要註銷該用戶。

+0

我實現了註銷功能。由於註銷,我能夠失去Auth引用,但用戶對象仍然有效。我認爲正因爲如此,我在登錄頁面上看到「Hi {{currentUser.firstname}}」,即使註銷後也是如此。我對嗎? @cartant –

+0

註銷後,從'onAuthStateChanged'傳遞的'user'應該爲'null'。最可能的解釋是,Angular的變化檢測沒有看到'currentUser'的變化。我想你需要調用'$ apply' - 或者其他(從Angular 1開發以來已經有一段時間了)。 – cartant

相關問題