我有一個角度$resource
用於登錄和獲取用戶信息。登錄名將用戶名和密碼發送到服務器並獲取一個不記名令牌。在User.login
的success
函數中,令牌存儲在localStorage
中。在getEmail
中,我將標記包含在用戶電子郵件地址的標題中。
問題是,第一次在控制器中調用getEmail
,$window.localStorage.getItem('TK')
求值爲null
,但是如果我刷新頁面,那麼它將正常工作。對包含令牌的服務器的所有後續請求均按預期工作。什麼會造成這種情況?
更不用說,getEmail
被稱爲登錄後的方式,並且我已經確認該令牌存在於調用getEmail
之前的localStorage
中。
angular.module('authentication')
.factory('User', function ($resource, $window) {
return $resource('/login', {}, {
login: {
method: 'POST'
},
getEmail: {
url: '/user',
method: 'GET',
headers: {
'Authorization': "Bearer " + $window.localStorage.getItem('TK')
}
}
});
})
在迴應@評論: 我的控制器看起來是這樣的:
angular
.module('app.mymodule', ['ngReource', 'authentication')
.controller('myCtrl', mymodule);
mymodule.$inject = ['User', '$window'];
function mymodule(User, $window) {
// THIS PRINTS THE TK IN CONSOLE CORRECTLY
console.log($window.localStorage.getItem("CHTOKEN"));
// THIS IS UNAUTHORIZED CUZ TK IS NULL
User.getEmail({}, function(data){
console.log('set the email');
});
}
只知道如果這是一個角度問題,如果使用常規的'window'而不是'$ window',會發生什麼? – floribon 2015-02-11 00:54:55
@floribon,只是試了一下。同樣的問題。 – norbertpy 2015-02-11 00:59:21
所以這與角度無關。不知何故,即使你認爲你的本地存儲器中沒有數據,也是如此。你甚至可以在運行任何角碼之前記錄'window.localStorage.getItem('TK')'?如果它爲空,那麼角將無濟於事。 – floribon 2015-02-11 01:09:29