Я использую AngularJS в своем веб-интерфейсе, и вместе с ним поставляется поставщик маршрутов Раньше мне не нужно было обрабатывать загрузки, поэтому не было проблем с производительностью провайдеров, но теперь у меня возникают проблемы с обработкой ссылок для загрузки в моей настройке.
Здесь ситуация. Маршрутный провайдер имеет маршрут по умолчанию, который перенаправляет на koti.html , и я не могу жестко закодировать ссылку для скачивания, потому что она создается динамически. Из-за этого ссылка для скачивания перенаправляет пользователя обратно на домашнюю страницу.
Я могу успешно использовать ссылку без префикса хэштега, но в этом случае мой перехватчик аутентификации не сработает и не включит мой токен аутентификации в запрос.
Проблема может быть решена двумя способами:
- Включить динамические ссылки для скачивания через routeprovider
- Сделать службу перехвата аутентификации включающей токен аутентификации в запросах, которые не проходят через поставщика маршрутов
Какой способ лучше и какие изменения я должен внести, чтобы он заработал?
Вот URL-адрес загрузки, который теперь содержит хэштег из-за моих недавних тестов:
<a target="_self" href="https://www.example.com:8888/#/downloads/public/download.txt">
Вот мой маршрутный провайдер:
.config(['$routeProvider', '$locationProvider', '$httpProvider', function($routeProvider, $locationProvider, $httpProvider){
$locationProvider.hashPrefix('');
$httpProvider.interceptors.push('authInterceptorService');
$routeProvider
.when('/', {
templateUrl: 'koti.html',
controller: 'mainCtrl'
})
.when('/testi', {
templateUrl: 'testi.html',
})
.when('/logout', {
templateUrl: 'logout.html',
})
.when('/login', {
templateUrl: 'login.html',
})
.when('/haut', {
templateUrl: 'haut.html',
})
.when('/koti', {
templateUrl: 'koti.html',
})
.when('/loki.html', {
templateUrl: 'loki.html',
})
.when('/raportointi', {
templateUrl: 'raportointi.html',
})
.when('/tulosraportti',{
templateUrl: 'tulosraportti.html',
})
.when('/opiskelijat',{
templateUrl: 'opiskelijat.html',
})
.when('/pk', {
templateUrl: 'pk.html',
})
.when('/varaushaku',{
templateUrl:'varaushaku.html',
})
.otherwise({
redirectTo: '/koti'
});
}])
А вот моя служба перехвата аутентификации:
.factory('authInterceptorService', ['$q', '$window', '$localStorage', function($q, $window, $localStorage){
return {
'request': function (config){
config.headers = config.headers || {};
try{
if ($localStorage.user.accessToken) {
config.headers.Authorization = 'bearer ' + $localStorage.user.accessToken;
}
return config;
}catch(err){
return config;
}
},
'response' : function(response){
headers = response.headers();
if(headers.tokenexpired !== 'false' && typeof headers.tokenexpired !== "undefined"){
console.log("Expired");
delete $localStorage.user
window.location = "/";
}
return response
},
'responseError': function(responseError){
if(responseError.data.tokenstatus === "expired"){
delete $localStorage.user
window.location = "/";
}
else if(responseError.status === 401 || responseError.status === 403) {
console.log("forbidden");
delete $localStorage.user
window.location = "/";
} else {
window.location = "/";
}
return $q.reject(responseError);
}
};
}])