2013-07-19 39 views
0

新建角,但我學習。 我的目標是:我有一個登錄視圖,將用戶對象傳遞給我們的API,API根據用戶數據庫進行檢查,並用Base64轉換用戶名和密碼。我還設置了一個返回一些簡單的JSON的頁面,如果用戶通過Authorization:Base ...作爲頭部,他們將接收數據。如果沒有,它響應401,我建立一個全球401處理程序路由回「/登錄」。AngularJS收發響應報頭/網絡API

我的問題是,在我的login服務我收到的Base64鍵,我可以提醒它表明我接受它。但是,我得到一個「未定義」如果我注入這項服務在我的JSON頁面,像這樣一個標題..

$http.get('http://myURL/api/project', { headers: {"Authorization": "Basic " + userLoginService.myData}}) 

所以我試圖做的基本的東西是通的數據從一個服務到另一個服務,我已經看到了如何從一個控制器到另一個控制器執行此操作,但是,我不確定這裏要做什麼。任何示例代碼顯然會很好。提前致謝。

回答

0

我不知道,你可以從一個服務共享數據到另一個服務,而沒有經過數據作爲參數傳遞給方法或構造函數。 例如

//inside of a service 
this.makeAPIcall = function(token){ 
    $http.get('http://...', {headers: {'Authorization': 'Basic ' + token}}); 
} 

但你可能要保存以供將來的http請求驗證密鑰反正這將是最好存放在某種程度上,這關鍵是不會要求你每次都要求進行身份驗證,你需要做一個請求。我建議你保存你的令牌在瀏覽器的localStorage的或作爲一個cookie,這樣就可以檢索通過爲其用戶登錄術語令牌。



作爲一個側面說明,如果你發現,你將不得不在每次進行API調用時通過授權頭,你可能需要對模塊本身有關配置$ httpProvider(本例假設您正在使用LocalStorange,並且已經存儲在你的AUTHKEY localStorage的:

angular.module('myApp', []).run(function($http, LocalStorageFactory){ 
    $http.defaults.headers.common['Authorization'] = 'Basic ' + LocalStorageFactory.get('authKey'); 
}); 
+0

在您發佈後的代碼,我注意到兩件大事。 1:你在myApp.RUN方法中設置頭文件,我認爲這應該在配置文件中完成。 2:您正在使用$ http.defaults ...設置標題我以爲是應該使用$ httpProvider – Shane

+0

我將圍繞有點玩存儲的令牌,並在應用程序運行方法設置標題來完成。我會盡快讓你知道我的結果:) – Shane

+0

你介意如何保存從srvice到localStorage的數據響應嗎? – Shane

0

所以,我做了什麼小號遠:當我從API獲取響應時,我將它設置爲一個cookie。在我的服務,我用它來得到一些JSON我設置像這樣

var token = ""; 
token = $cookieStore.get('token'); 
$http({method: "GET", url:"http://example.com/api/project", headers:{'Authorization' : 'Basic ' + token}}) 

在標題中的cookie然而,當我設置頭這樣,我的應用程序甚至沒有運行GET。相反,在Firebug控制檯我看

Object { transformRequest=[1], transformResponse=[1], method="GET", more...} 

當我點擊這個我可以看到,有報頭被設置,但應用程序不執行GET操作,那麼近又那麼遠。有任何想法嗎?