2015-11-18 2 views
1

Я хочу проверить, присутствует ли токен CSRF-файла cookie, а если нет, перенаправляйте логин.Как перенаправить в angularjs-перехватчик, за исключением ошибки?

Не имея печенья, однако, не вызывает requestError, поэтому я не могу его там положить.

Я уверен, что могу просто вставить его в request, но я хочу сделать это «чисто», а не грязное перенаправление, которое вызовет тонну ошибок, которые могут возникнуть в консоли, потому что я перенаправляю середину -promise цепь.

Примечание: Я не использую углы управления аутентификацией. Я просто позволю бэкэнд-ручке, используя стандартную форму POST на сайте маркетинга. Вот почему он использует window.location.href, а не $location.path().

$httpProvider.interceptors.push(function($q, $cookies) { 
    return { 
     request: function(config) { 
     if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) { 
      return config; 
     } else { 
      // can I do something here to redirect cleanly? 
     } 
     }, 
     responseError: function(rejection) { 
     if (rejection.status === 401) { 
      window.location.href = '/login'; 
     } 
     return $q.reject(rejection); 
     } 
    }; 
    }); 
+0

Я использую HTTPS://github.com/witoldsz/angular-http-auth –

ответ

1

Из docs (курсив мой):

requestError: interceptor gets called when a previous interceptor threw an error or resolved with a rejection.

Таким образом, можно отказаться и создать отказ со статусом 401 от вашего request:

$httpProvider.interceptors.push(function($q, $cookies) { 
    return { 
    request: function(config) { 
     if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) { 
     return config; 
     } else { 
     return $q.reject({ 
      status: 401 
     }); 
     } 
    }, 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 
     window.location.href = '/login'; 
     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 
Смежные вопросы