Добрый день!
Вкратце, как решал эту проблему:
Отдельный сервис занимается сохранением и обновлением токена, назовем его Session.
В interceptors фазе
request вы все делаете верно, это добавляет токен на каждый запрос.
Переходим к фазе
responseError:
1) Определяем необходимые тип ошибки
2) Можно ограничить количество повторных запросов, и редиректить на login page (тут свой нюанс, надо обнулять счетчик в фазе
response - успешный ответ)
3) Отправляем запрос на обновление токена
4) При успехе, вызываем сервис $http с параметрами этого запроса
Пример кода:
responseError: function(rejection) {
...
if (tokenError) {
return Session.refreshToken().then(function() {
return $http(rejection.config); // Повторяем запрос, когда получили новый токен
});
}
return $q.reject(rejection);
}