2013-12-10 72 views
0

我在我的AngularJS-Laravel項目中實現了我自己的API-Token系統,所以API-Token使用頭部通過$ http發送。問題是,當用戶登錄時,它會在API工廠中設置API令牌,但$資源不會被更新。

myApp.factory('Api', ['$resource', '$http', '$cookies',function($resource, $http, $cookies) { 
    var baseURL = 'an api url'; 
    var APIToken = $cookies.token; 

    return { 
     SetToken: function(token) { 
      APIToken = token; 
      console.log(APIToken); 
     }, 

     Authenticator: function(data,callback) { 
      $http({ 
       url: baseURL + 'auth', 
       method: "GET", 
       params: data 
      }).success(callback); 
     }, 
     Authors: $resource(baseURL + "journalists/:id", {id: '@id'}, { 
      update: { 
       method:'PUT', 
       headers: { 'API-Token': APIToken } 
      }, 
      query: { 
       method:'GET', 
       isArray: true, 
       headers: { 'API-Token': APIToken } 
      } 
     }), 
    }; 
}]); 

最有趣的部分是headers: { 'API-Token': APIToken }部分。問題是,當調用SetToken時,headers不會更新。有沒有辦法解決?我是否使用了錯誤的功能?

回答

1

您的$resource對象在調用時僅創建並設置一次。每次調用其中一個函數時,它都不會訪問APIToken變量。爲了使上述代碼正常工作,在調用Authors()之前,必須先撥打SetToken(),因爲一旦您撥打Authors(),就會創建$resource對象,並在此刻使用APIToken的值。我不知道有什麼辦法做你想做的事情,但仍然使用$resource服務。您可能必須直接使用$http服務,就像您爲Authenticator功能所做的那樣。

Authors: { 
    update: function(obj){ 
     $http({ 
      url: baseURL + 'journalists/' + obj.id, 
      method: "PUT", 
      params: obj 
     }); 
    }, 
    query: function(obj){ 
     $http({ 
      url: baseURL + 'journalists/' + obj.id, 
      method: "GET", 
      params: obj 
     }); 
    }, 
}) 

或類似的東西。希望有所幫助。

+0

這正是要走的路。謝謝你指點我正確的方向! –