Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
angular.module(...).config(function ($locationProvider) {
$httpProvider.interceptors.push('authInterceptor');
}).factory('authInterceptor', function ($rootScope, $q, $cookieStore, $location) {
return {
// Add authorization token to headers
request: function (config) {
config.headers = config.headers || {};
if ($cookieStore.get('token')) {
config.headers.Authorization = 'Bearer ' + $cookieStore.get('token');
}
return config;
},
// Intercept 401s and redirect you to login
responseError: function(response) {
if(response.status === 401) {
$location.path('/login');
// remove any stale tokens
$cookieStore.remove('token');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
};
})
if (toState.data.noLogin !== undefined && toState.data.noLogin)
Самая главная проблема это асинхронная проверка аутентификации. При переходе с одного состояния на другое нужно по идее проверять аутентификацию путем запроса на сервер. А это асинхронная операция. И в итоге не ясно как тогда переписать Ваш код, чтобы это заработало как нужно.
Вот эта строка
if ($sessionStorage.user) {по идее асинхронная. Ибо для проверки есть ли аутентификация или нет нужно делать запрос на сервер.
Нашел вариант асинхронной и постоянной проверки аутентификации http://erraticdev.blogspot.ru/2015/10/angular-ngroute-routing-authorization.html
AngularJS + UI Router: проверка авторизации и прав доступа