Utilizzo un intercettore molto semplice per controllare responseRejection per 403 Access Forbidden per reindirizzare gli utenti all'accesso, ma non reindirizza. Posso console.log fino alla riga prima di $ location.path e dopo di esso, e non si verifica mai. Qualcun altro ha avuto questo successo? Sono stato a guardare questo per un po 'ora ... Originariamente non volevo nemmeno usare $ location, ma non posso iniettare ui.router senza ottenere una dipendenza circolare, che non riesco a capire come per liberarmi di così $ posizione avrebbe dovuto farmi muovere, mentre ci pensavo.Reindirizzamento AngularJS in interceptor
.factory('AuthInterceptor', ['$q', '$location',
function($q, $location) {
var service = {
responseError: function(responseRejection) {
// Authorization issue, access forbidden
if(responseRejection.status === 403) {
// TODO: show a login dialog, and/or redirect to login
console.log("Response rejected. Redirecting to login...");
$location.path('/login');
$location.replace();
console.log("Not so much with the redirecting... I'm still here");
}
// Propagate error to any chained promise handlers
return $q.reject(responseRejection);
}
}
return service;
}])
Quando si esegue '$ location.path' l'istruzione successiva ad esso verrà eseguito perché si verificherà il cambiamento percorso solo nel successivo ciclo di digerire. Probabilmente non si può iniettare direttamente '$ stato', invece si può iniettare' $ injector' e ottenere '$ injector.get ('$ stato'). Go (statename)'. Anche l'impostazione del percorso di localizzazione o href ecc non sta bloccando l'attività, il che significa che lascerà eseguire lo script corrente completamente e quindi cambierà il luogo. – PSL
Grazie, l'iniezione di $ injector funziona, e non sapevo nulla dell'attività di blocco, quindi grazie ancora :) Dovresti inserire questa risposta in una risposta in basso in modo che sia più visibile e ottieni più credito. Grazie ancora – mtpultz
Felice che funzioni. Certo, lascerò cadere una risposta. – PSL