2016-09-17 68 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

相关问题