2013-10-30 60 views
0

當前我使用$on('angularFireAuth:login', function(evt,auth){...get other profile info...})在用戶登錄後填充用戶的配置文件和授權詳細信息。這些東西被添加到authService中,以後可以輕鬆訪問整個應用程序,而不必將其放入$rootscope。 問題是這不會觸發刷新,或重新打開。由於會話令牌或其他原因,用戶仍然通過身份驗證,但他們需要重新登錄才能加載其他個人資料。使用angularFireAuth刷新時的持久性配置文件數據

這是什麼適當的解決方案? 我應該使用不是登錄的未記錄事件嗎?

這裏是我的工作的app.js:

angular.module('myApp',['firebase']). 
    constant({FirebaseUrl:"https://<foo>.firebaseio.com/"}). 
    service('authService', function authService(){ 
     return { 
      isLogged:false, 
      name:null, 
      email:null, 
      id:null, 
      group:null, 
      err:null 
     } 
    }). 
    controller('AuthCtrl', function($scope, authService, angularFireAuth, angularFireCollection, FirebaseUrl){ 
     angularFireAuth.initialize(FirebaseUrl, {scope:$scope, name:"auth"}); 
     $scope.login = function(){ 
      angularFireAuth.login('password', { 
       email: '[email protected]', 
       password: 'test' 
       }); 
     } 
     $scope.$on("angularFireAuth:login",function(evt,auth){ 
      url = FirebaseUrl + 'profiles/user-' + $scope.auth.id; 
      $scope.url = url; 
      var fbref = new Firebase(url); 
      fbref.once('value',function(profileSnapshot){ 
       $scope.name = profileSnapshot.child('name').val(); 
       $scope.group = profileSnapshot.child('group').val(); 
      }); 
      //set authService stuff 
      authService.name = $scope.name; 
      authService.group = $scope.group; 
      authService.email = $scope.auth.email; 
      authService.id = $scope.auth.id; 
      authService.isLogged = true; 
     }); 

     $scope.logout = function(){ 
      angularFireAuth.logout(); 
      authService.email = null; 
      authService.id = null; 
      authService.isLogged = false; 
      authService.name = null; 
      authService.group = null; 
     } 
    }). 
    controller('NavCtrl', function($scope, authService){ 

    }); 

回答

0

您應該分離從認證事件的檔案信息,因爲你已經注意到,這些事件僅觸發認證狀態變化時。您應該有一個單獨的服務或工廠來處理配置文件信息,該配置文件在頁面加載時(如果用戶已登錄)和身份驗證事件時調用。

+0

啊,這將是一個明智的做法。你知道任何我可以用作指導的例子嗎?我仍然很漂亮。 – Bro

+0

我會在AngularFire [showcase](http://angularfire.com/showcase.html)中挖掘一下。通過閱讀這些項目中的源代碼,您將學到很多東西。 – hiattp

+0

https://github.com/firebase/firereader/它是。如果其中一個人除了身份驗證之外還要求授權,那將會很好。 – Bro