2014-02-08 51 views
0

IM發展的angularjs的測試應用程序並從登錄頁面驗證我的用戶, 快速代碼:如何訪問用戶信息在angularjs申請成功登錄後

exports.login = function (req, res, next) {  
    passport.authenticate('local', function(err, user, info) { 
    var error = err || info; 
    if (error) return res.json(401, error);  
    req.logIn(user, function(err) {   
     if (err) return res.send(err); 
      res.json(req); 
    }); 
    })(req, res, next); 

}; 

服務:(驗證和Session) 驗證服務代碼: 登錄名:函數(用戶,回調函數){var_cb = callback || { } angular.noop;

 return Session.Sessionlogin().save({ 
      email: user.email, 
      password: user.password 

     }, function(user) { 
      $rootScope.currentUser = user; 
      return cb(); 
     }, function(err) { 
      return cb(err); 
     }).$promise; 
     }, 

會議服務代碼: Sessionlogin:函數(){ 回報$資源( '/ API /會話/');現在

Controller Code: 
    $scope.login = function(form) {  
      $scope.submitted = true;    
      if(form.$valid) { 
      Auth.login({ 
       email: $scope.user.email, 
       password: $scope.user.password     
      }) 
      .then(function(err) { 
       // todo : redirect to admin dashboard 
       $location.path('admin/dashboard'); 
      }) 
      .catch(function(err) { 
       err = err.data; 
       $scope.errors.other = err.message; 

      }); 
      } 
     }; 

每一件事情做工精細,我的問題是: 成功登錄IM之後將用戶重定向到儀表板page.Now我如何可以訪問儀表盤page.Is的用戶信息有任何形式的session object in angularjs where i can store the response received from the express code and send it to the dashboard page.

+0

不是默認情況下。但是,你當然可以創建一個。 – Sprottenwels

+0

你能否介紹一下。 – sergioramosiker

+2

個人而言,我會去用戶服務。如果用戶成功登錄,我將在此服務中存儲必要的信息並將它注入到任何地方,我需要訪問當前用戶數據。隨時添加一些信息,如果我有什麼不對或者有什麼不清楚的地方。我有一種感覺,就像我們正在處理'圍繞這個概念'問題:) – Sprottenwels

回答

2

要圍繞一個角度應用程序共享數據,您可以:

  • 商店時,你需要訪問這些數據,然後可以注入到控制器的服務的數據。服務是單例:每個服務只會有一個實例,這就是爲什麼數據在控制器中持久存在的原因。
  • 將數據存儲在$rootScope。看起來您已將用戶對象設置在根作用域上,因此您可以將其作爲$rootScope.currentUser進行訪問,前提是您已將$rootScope注入到控制器中。請注意,清除根作用域通常不是一個好主意,但在這種情況下,我認爲將用戶對象存儲在那裏是明智的,因爲您可能需要從很多視圖訪問它。

我通常用戶對象存儲在$rootScope(以便它從視圖訪問)在專用服務(以便它從控制器/等訪問)。

+0

不會將數據存儲在$ rootcope中限制您單元測試代碼的能力;因爲它將全局依賴添加到您的應用程序中?您的第一個選擇 - 創建服務[或工廠] - 利用Angular的依賴注入功能,我認爲這是正確的方法。 – JeffryHouser

+0

我對角度相當陌生,不太熟悉角度單元測試,所以你可能是對的。如果用戶對象的唯一目的是協助視圖渲染,可以存儲用戶對象嗎?我通常需要用戶對象可以從很多視圖訪問,我覺得注入服務和爲每個控制器分配$ scope.currentUser是矯枉過正的。 –

+0

從我在別處看到的情況來看,如果服務需要與視圖共享,通常會將該服務添加到控制器中的$ scope變量中;有點像這樣'$ scope.myService = serviceArgument' – JeffryHouser

相關問題