1

현재 AngularJS 1.3에서 로그인 흐름을 작성 중입니다. 내 문제는 $ http 호출에서 반환되는 약속은 '.then'내부의 코드를 해결하지 않는다는 것이다.

나는 잘못된 사용자 이름이나 암호를 입력했을 때 반환되는 401 오류를 처리하기 위해 서버에서 오는 오류 메시지를 처리하기 위해 노력하고 있습니다. 그러나 401이 반환되면 .the는 절대로 해결되지 않으며 그 내부의 코드는 실행되지 않습니다.

의 범위에 로그인 기능과 로그인 폼의 컨트롤러를 다음과 같이 :

$scope.login = function() { 
    $scope.authError = null; 

    // Try to login 
    var promise = session.login($scope.user); 

    promise.then(function(loggedIn) { 

     // THIS CODE NEVER RUNS 

     if (!loggedIn) { 
      $scope.authError = localizedMessages.get('login.error.invalidCredentials'); 
     } 

    }, function(x) { 
     $scope.authError = localizedMessages.get('login.error.serverError', { exception: x }); 
    }); 
}; 

나는 로그인을 담당 세션 공장이 다음과 같이

관련 코드는 및 기타 세션을 기반으로합니다. 로그인 코드는 다음과 같습니다.

login: function(credentials) { 
    var $http = $injector.get('$http'); 
    var url = ENV.apiEndpoint + "/sessions"; 

    var newSession = $http.post(url, credentials); 

    return newSession.then(function(data) { 
     session.set(data.token); 

     //THIS CODE ONLY RUNS ON A SUCCESS RESPONSE 

     if(session.isAuthenticated()) { 
      closeLoginModal(true); 
     } 

     return session.isAuthenticated(); 
    }); 
} 

문제가있는 코드에 주석을 추가했습니다. 나는이 코드가 왜 작동하지 않는지에 관해서는 손해보고있다. 약속에 대한 나의 이해에서, '그 때'는 응답이 무엇이든 오류의 성공 여부에 관계없이 해결해야합니다.

나는 인터셉터를 실행 중이지만, 최종 결과에 아무런 운이 없도록 시도해 보았습니다.

내가 누락 된 항목이 있습니까?

+0

401이 '오류'(또는 각도로 불리는 것이 무엇이든)로 해결되지 않습니까? 오류 기능이 실행됩니까? –

+0

오류를 해결할 수 있지만 올바른 경우 .then 약속이 성공 또는 오류 여부에 관계없이 문제를 해결해야합니다. 오류가 있으면 컨트롤러의 .then 두 번째 기능을 호출해야합니다. 그게 내가 잘못한거야? – Octothorpe

+0

... 그래서 해결하고 오류 기능을 실행 중입니다. HTTP 호출로 인해 HTTP 오류 코드가 발생하므로 올바른 것처럼 보일 수 있습니다. 어쩌면 당신은 잘못 된 일을 설명하고있을 것입니다 : 오류 기능이 호출되고 있습니까? –

답변

1

로그인 (서버 측)이 401과 같이 HTTP 오류 코드를 반환하면 오류 (예 : then으로 전달 된 두 번째 기능)가 발생합니다. 당신이 1 개를 통과하지 않으면 그것은 폭격해야한다; 그래서 상위 수준의 오류 함수가 호출됩니다.

+0

감사합니다. 이것은 확실히 큰 도움이되었습니다. 인터셉터를 디버깅하지 않지만 필요한 메시지를 받고 있습니다. – Octothorpe

관련 문제