2016-06-15 1 views
0

У меня есть приложение, для которого я создал перехватчик для обработки выходов токенов после 15-минутной бездействия, он успешно перенаправляется на страницу входа после того, как токен истек, но Im не способен показать ошибку после перенаправления на страницу входа.angularjs http interceptor, чтобы показать ошибку на пути к загруженному пути

Мой вопрос: как я могу показать пользователю ошибку с истекшим сроком действия на странице входа, после того как перехватчик перенаправил приложение на эту страницу.

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 =« токеном истек »и затем показать его выше формы входа в всплывающее окно. Вы также можете сделать ошибку параметром url: '/ login? Error = TokenExpired'. – forrestmid

+0

@forrestmid моя другая проблема - это отсутствие знаний о angularjs ... Я попытался отправить ошибку в качестве параметра url, и я задал область действия в контроллере входа в систему, но я не могу отразить эту ошибку в шаблоне при выполнении location.path ('login'). search (params), но только при перезагрузке страницы login? error = xxxx, как если бы location.path не создал запрос на получение этой страницы. – maumercado

+0

также не знаю, как перейти и добавить $ stateParams, попробовал его, но продолжал сталкиваться с переходом метода can not call undefined ... так как scope не является var в перехватчике ... снова мое отсутствие знания angularjs здесь может быть единственным Причина – maumercado

ответ

0

Наконец, и благодаря @forrestmid указать меня в правильном направлении, это то, что я в конечном итоге делает.

на HTTP-перехватчика просто добавил:

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

, а затем на контроллер просто должен был сделать:

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

теперь на шаблоне у меня уже есть логику для обработки объект ошибки, так что теперь он отлично работает :)

0

Ссылка на this post в отношении ввода $ государственной службы в HTTP-перехватчик:

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:

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

По умолчанию там не будет никакой ошибки при переходе к app.login состояния, но при возникновении ошибки парам устанавливается в любой другой, он может отобразите ошибку. Это будет в переменной $stateParams.error на вашей странице входа.

Сообщите мне, если я испортил любой из этих кодов, так как я не тестировал его. Линия, я думаю, вы хотите, это линия инжектора $.

Смежные вопросы