Zuerst hatte ich configAuth
mit Headern, einschließlich JWT-Token bei jedem Controller.Wie Interceptor für verschiedene Anfragen (URLs) zu spalten?
Aber jetzt, wenn ich eine große Anzahl von Controllern habe, merkte ich, dass ich etwas dagegen tun muss. Ich habe von interceptors
gehört und versucht, sie zu bekommen.
Ich weiß, dass ich Token nicht einfach jeder Anfrage stellen kann, denn es gibt einige Seiten und Anfragen wie /login
, die überhaupt kein Token Authorization
haben sollten. Und das Erhalten von HTML-Dateien mit Authorization header
gibt mir irgendwie eine Ausnahme. Also habe ich versucht, Anfragen so zu spalten:
angular.module('App')
.factory('sessionInjector',['$injector', function ($injector) {
var sessionInjector = {
request: function (config) {
if (config.url == "/one" || config.url == "/two"){
config.headers['Content-Type'] = 'application/json;charset=utf-8;';
config.headers['Authorization'] = localStorage.getItem('token');
} else {
config.headers['Content-Type'] = 'application/json;charset=utf-8;';
}
return config;
},
response: function(response) {
if (response.status === 401) {
var stateService = $injector.get('$state');
stateService.go('login');
}
return response || $q.when(response);
}
};
return sessionInjector;
}]);
Aber es funktioniert nicht mit Anfragen wie /one/{one_id}
und ich kann alle Möglichkeiten nicht hart codieren. Was ist die beste Vorgehensweise dafür?
Nicht hier in den besten Praktiken gehen, aber Sie können leicht flexibler Matcher verwenden als ' config.url == "/ eins" '. Zum Beispiel können Sie überprüfen, ob die URL * mit "/ one" beginnt, indem Sie 'config.url.indexOf ('/ one') === 0' oder mit Regex verwenden. Wenn Sie mehr Routen benötigen, die eine Autorisierung benötigen, als diejenigen, die nicht autorisiert sind, können Sie die Prüfung auch anders herum durchführen, wie zum Beispiel 'if (config.url! == '/ login')'. – noppa