我有以下的角服務:角服務被稱爲兩次
appServices.factory('AuthenticationService', function() {
var auth = {
isLogged: false
}
return auth;
})
這TokenInterceptor
服務:
appServices.factory('TokenInterceptor', function ($q, $window, AuthenticationService) {
return {
request: function (config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
return config;
},
response: function (response) {
console.log(AuthenticationService.isLogged)
return response || $q.when(response);
}
};
});
我推入$httpProvider
$httpProvider.interceptors.push('TokenInterceptor');
而且
$routeProvider.
when('/', {
templateUrl: 'partials/index',
controller: IndexCtrl,
access: { requiredLogin: true }
})
在AuthenticationService.isLogged = true
登錄後,如果我瀏覽到路徑「/」通過agular按鈕,一切正常,但是當頁面被刷新的AuthenticationService再次實例化,我可以看到console.log(AuthenticationService.isLogged)
打印false
並打印true
後inmediately所以頁面導航回「/登錄」。
爲什麼它打印false - > true?刷新後我能做些什麼來保持身份驗證狀態?
編輯:
感謝您的答案。關於認證tutorial的評論,我在跟隨某人提到相同的問題。我最終了解到他們的方法有點麻煩。 AuthenticationService
不僅僅是檢查$window.sessionStorage.token
中令牌的存在,因此您對於使用某種存儲來說是完全正確的。
最後我只是在做:
appServices.factory('AuthenticationService', function() {
isLogged: function() {
return $window.sessionStorage.token == true
}
})
你可能想看看ngStorage,或者某種存儲機制.. – PSL 2014-09-19 13:16:18
@PSL我不認爲這是重點在這裏。我想的更多的是等待第二個isLoggein = true或試圖避免isLoggein = false。 – eskalera 2014-09-19 13:53:27
對不起mybad。我正確閱讀 – PSL 2014-09-19 14:06:04