所以我有這個功能,我run
在angularjs(運行AngularJS v1.2.26)如何使用ui-router檢查身份驗證並自動重定向到登錄狀態?
.run(function(....) {
authService.authCheck();
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (next.requireLogin) {
if (!authService.isLoggedIn()) {
$location.path('/login');
event.preventDefault();
}
}
});
})...
時直接訪問需要身份驗證例如一個網址http://127.0.0.1:8080/secret
,函數總是重定向到登錄路徑,清楚地在調試一段時間後,它總是評估爲false。當訪問默認頁面,然後去指定的路線它運行沒有任何問題。
這是一部分我authService
this.authCheck = function() {
$http({
method: 'PUT',
url: '/api/login'
}).
success(function(data, status, headers, config) {
if (status === 200) {
userIsAuthenticated = true;
} else {
userIsAuthenticated = false;
}
$rootScope.loginStatus = userIsAuthenticated;
}).
error(function(data, status, headers, config) {
userIsAuthenticated = false;
$rootScope.loginStatus = userIsAuthenticated;
});
};
this.isLoggedIn = function() {
return userIsAuthenticated;
};
所以每次我有!authService.isLoggedIn()
一個破發點時間,我看到它的計算結果爲假,即使在運行塊中的函數試圖到達$rootScope.$on
之前,它驗證功能。
究竟是什麼阻止了userIsAuthenticated
變量的持續狀態?
所以即使我沒有使用承諾,調用('$ http')仍然被認爲是異步調用?感謝您的回覆,我會在家時嘗試一下。 – ymg 2014-11-24 08:02:18
'$ http'調用總是異步的,以防止鎖定瀏覽器。並且你使用承諾 - 返回值是一個承諾,擴展了特殊函數'success'和'error' :)。對於我的示例工作,你只需要返回整個事情。 – hon2a 2014-11-24 08:04:33
我明白了。非常感謝真棒的答案! – ymg 2014-11-24 08:08:38