은 그래서 (AngularJS와의 v1.2.26 실행) AngularJS와 내 run
이 기능이인증을 확인하고 자동으로 ui-router로 로그인 상태로 리디렉션하는 방법은 무엇입니까?
.run(function(....) {
authService.authCheck();
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (next.requireLogin) {
if (!authService.isLoggedIn()) {
$location.path('/login');
event.preventDefault();
}
}
});
})...
직접 인증을 예를 들어, 필요한 URL에 액세스 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
에 도달하기 전에 인증을 시도에도 불구하고 false로 평가되는 것을 볼 수 기능.
정확히 userIsAuthenticated
변수의 상태가 지속적이지 못하게 막습니까?
약속을 사용하지 않고 있지만 호출 ('$ http')은 여전히 비동기 호출로 간주됩니까? 스 니펫에 감사드립니다. 집에있을 때 시도해 보겠습니다. – ymg
'$ http' 호출은 브라우저 잠금을 막기 위해 항상 비동기입니다. 그리고 당신은 약속을 사용합니다 - 반환 값은 특별한 함수'success'와'error'로 확장 된 약속입니다 :) 제 샘플을 사용하려면 모든 것을 반환해야합니다. – hon2a
알겠습니다. 멋진 답변을 주셔서 감사합니다. – ymg