Я реализую угловое приложение для аутентификации.
Это машина событий, которая использует перехватчик, поэтому, если какой-либо запрос приводит к ответу 401, он выводит модальное окно входа. Когда вход в систему выполнен успешно, он снова выполняет запрос (что также может привести к ошибке 403, если у вошедшего в систему пользователя недостаточно прав для доступа к запрошенному ресурсу).
Пока все работает как положено, за исключением того, что когда пользователь отменяет процесс входа в систему, $location.path()
по-прежнему указывает на запрошенный ресурс. Я хочу вернуться к предыдущему пути. Так:
Что я ожидал
Я ожидал, что смогу получить URL вызываемого абонента следующим образом:
.factory('authInterceptor', ...
return {
// Append the authentication headers to every request
request: function(config) {
previousLocation = $location.path(); // <--- HERE
if(Session.exist) {
config.headers.Authorization = Session.token;
}
return config || $q.when(config);
},
Я ожидал, что эта строка даст мне путь к вызываемому, но на самом деле она дает мне запрошенный (angular изменил его перед выполнением запроса).
Поставщик маршрута
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/admin', {
templateUrl: "/admin"
})
.otherwise({ redirectTo: '/' });
}])
Этот непослушный маленький мальчик меняет мой путь до просьбы. Я думаю, что могу что-то сделать здесь с разрешением, но я не нахожу это полезным, так как это полностью нарушит инкапсуляцию, заставляя меня разрешать каждый раз, когда я вызываю любой защищенный ресурс, поэтому я могу передать текущий путь к какой-либо службе в моем приложение авторизации
Итак, как я могу получить предыдущий путь от перехватчика или какой-либо службы в приложении аутентификации, не отправляя его явно из конфигурации провайдера маршрута?