2016-06-15 1 views
0

토큰이 만료 된 후 로그인 페이지로 성공적으로 리디렉션되지만 임은 수행 할 수없는 토큰 만료를 처리하기위한 인터셉터를 생성 한 응용 프로그램이 있습니다. 로그인 페이지로 리디렉션 한 후 오류를 표시하십시오.angularjs HTTP 인터셉터가로드 된 위치 경로에 오류를 표시합니다.

제 질문은 인터셉터가 앱을 해당 페이지로 리디렉션 한 후 로그인 페이지에 토큰 만료 오류가 표시되는 것을 어떻게 할 수 있습니까?

Heres는 내 리디렉터 : 마지막으로

app 
    .config(['$httpProvider', function($httpProvider) { 
     $httpProvider.interceptors.push(function($q, $location, LoopBackAuth) { 
      return { 
       responseError: function(rejection) { 
        if (rejection.status == 401) { 
         //Now clearing the loopback values from client browser for safe logout... 
         LoopBackAuth.clearUser(); 
         LoopBackAuth.clearStorage(); 
         $location.path("/login"); 
        } 
        return $q.reject(rejection); 
       } 
      }; 
     }) 
    }]) 
    .config(function(LoopBackResourceProvider) {     
     LoopBackResourceProvider.setAuthHeader('X-Access-Token'); 
    }) 
+0

'/ login' 경로가 기본 응용 프로그램의 일부입니까? 동일한 index.html을 공유합니까? 그렇다면'$ stateParams.error = 'Token expired ''를 사용하여 다른 페이지로 전환 한 다음 로그인 폼 위에 팝업으로 표시 할 수 있습니다. 또한 url 매개 변수 인'/ login? error = TokenExpired'를 오류로 만들 수 있습니다. – forrestmid

+0

@forrestmid 내 다른 문제가 내 angularjs 지식 부족 ... URL 매개 변수로 오류를 보내려고 및 로그인 컨트롤러 범위를 설정하지만 location.path 할 때 해당 오류를 템플릿에 반영 할 수 없습니다. 'login'). search (params). login? error = xxxx 페이지를 다시로드 할 때만 location.path가 해당 페이지에 대한 get 요청을 작성하지 않은 것처럼 처리합니다. – maumercado

+0

또한 $ stateParams를 전환하고 추가하는 방법을 알지 못하지만 시도했지만 정의되지 않은 전환 방법을 발견하지 못했습니다 ... 범위가 인터셉터의 var가 아니므로 다시 여기에 anglejs 지식이 부족한 것이 유일한 것일 수 있습니다 이유 – maumercado

답변

0

및 감사이 내가하고 결국 무엇을 올바른 방향으로 날 가리 키도록 @forrestmid합니다. 방금 추가 한 HTTP 인터셉터에

:

var queryString = $location.search(); 
$scope.errors = {}; 
if (queryString && queryString.error) { 
    $scope.errors = { 
     'invalid_token': { 
      code: 'invalid_token' 
     } 
    } 
} 

을 이제 템플릿에 나는 아직 현재 오류 개체를 처리하는 논리를 가지고 :

$location.path("/login").search({error: 'invalid_token'}); 

와는 컨트롤러에서 바로해야했다 그것은 잘 작동합니다.

0

this post을 참조하면 $ state 서비스를 HTTP 인터셉터에 삽입하는 것과 관련됩니다.

어떤로 설정 PARAM 오류가있을 때, 그것은 수 app.login 상태로 전환 할 때 오류가 없을 것 기본적으로

app.config(function($stateProvider){ 
    $stateProvider 
     .state("app",{abstract: true}) 
     .state("app.login", { 
      url: "/login", 
      params: {error: ""} 
     }); 
}); 

있지만 :

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function($q, $injector, LoopBackAuth) { 
     return { 
      responseError: function(rejection) { 
       if (rejection.status == 401) { 
        //Now clearing the loopback values from client browser for safe logout... 
        LoopBackAuth.clearUser(); 
        LoopBackAuth.clearStorage(); 
        $injector.get('$state').go('app.login', {error: 'Token expired.'}); 
       } 
       return $q.reject(rejection); 
      } 
     }; 
    }) 
}]); 

당신이 ui.router를 사용한다고 가정하면 오류를 표시하십시오. 로그인 페이지의 변수 $stateParams.error에 있습니다.

내가 테스트하지 않았기 때문에 그 코드 중 하나라도 잘못하면 알려주십시오. 내가 원하는 줄은 $ 인젝터 줄입니다.

관련 문제