2015-11-09 11 views
3

我在我的AngularJS應用程序中使用ng-token-auth以及devise_token_auth。我已經實現登錄和註銷成功,但我無法執行以下操作:使用ng-token-auth檢索身份驗證狀態和當前用戶

  1. 確定用戶是否被驗證,
  2. 獲取當前用戶的信息。

我已經部分使用事件訂閱解決1:

myApp.run(['$rootScope', 
    ($rootScope)-> 
    $rootScope.isAuthenticated = false 

    $rootScope.$on('auth:validation-success', (e)-> 
     $rootScope.isAuthenticated = true 
    ) 
    $rootScope.$on('auth:login-success', (e)-> 
     $rootScope.isAuthenticated = true 
    ) 

    $rootScope.$on('auth:validation-error', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
    $rootScope.$on('auth:invalid', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
    $rootScope.$on('auth:login-error', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
    $rootScope.$on('auth:logout-success', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
    $rootScope.$on('auth:account-destroy-success', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
    $rootScope.$on('auth:session-expired', (e)-> 
     $rootScope.isAuthenticated = false 
    ) 
]) 

不過,我不知道這是做的最好的方式。也許我應該在 服務中做呢?

關於2,我已經安裝了angular-resource並配置了User資源,但我真的不知道從哪裏獲取用戶信息(服務?控制器?),以及如何當用戶更新他們的個人資料更新(我應該只聽事件訂閱者還是重新加載每個狀態變化的信息?)。

我對Angular相當陌生,所以請讓我知道我是否做了其他任何錯誤。

回答

2

我強烈建議您創建某種UserService,它將保存您的所有身份驗證和用戶數據以及您擁有的關於用戶的所有邏輯功能,以及使用用戶資源獲取,創建,更新,刪除,身份驗證,註銷等... 你應該真的避免在這裏使用$ rootScope,這不是它的意思,真的沒有很多的情況下,你會喜歡把數據放在$ rootScope無論如何。

所以在UserService我建議你保存用戶的信息,

function UserService(User) { 
    var _user = null; 

    this.getUserFromServer = function(userid) { 
     User.get(userId).$promise.then(user) { _user = user; }; 
    } 

    this.isAuthenticated = fucntion(){ 
     return user !== null;   
    } 

    this.logoff = fucntion(){ 
     user = null;   
    } 
} 

所以這種方式,我解決了你們兩個有問題, 使用您創建觸發上述功能的事件偵聽器。

祝你好運。

+0

我將如何從模板訪問這些數據? –

+0

向UserService添加一個新函數 - this.getUser = function(){return _user};這個函數可以在任何控制器內部使用,你可以將它附加到$ scope並在模板中使用它 –

+0

好的,我如何訂閱服務內部的事件? –

相關問題