Sto creando un sistema di autenticazione in angular2 con l'idea che se un utente che non è autenticato prova a navigare verso un URL "protetto", il sistema reindirizzerà l'utente alla pagina di accesso che inserisce il url una query param chiamata "next" che aiuterà il sistema di login a reindirizzare l'utente a dove voleva essere in primo luogo.Angolare2 Reindirizza dopo l'accesso
login?next=my-redirect-url
per proteggere i miei componenti, sto usando il decoratore @CanActivate(isUserAuthenticated)
in tutti loro. La funzione isUserAuthenticated
è qualcosa come segue:
function isUserAuthenticated(
prevInstr: ComponentInstruction,
nextInstr: ComponentInstruction
): boolean {
const authService = injector.get(AuthService);
const router = injector.get(Router);
if(authService.isLoggedIn()) {
return true;
} else {
router.navigate(["/Login", {next: nextInstr.urlPath}]);
return false;
}
}
Questo approccio non funziona perché la proprietà del nextInstr
urlPath
non mostra l'url "completo" (manca parametri di query per esempio).
Esiste un modo per creare l'URL completo da un'istanza ComponentInstruction
come nextInstr
?
Avete visto la discussione in https://github.com/angular/angular/issues/4112 Penso che sia abbastanza simile a ciò che si tenta di realizzare. C'è anche un link a un Plunker (non ho più avuto uno sguardo da vicino). –
@ GünterZöchbauer grazie per il link, ma ho già risolto il problema di come ottenere l'iniettore all'interno della funzione di decorazione 'isUserAuthenticated'. Il mio problema è come generare l'url per reindirizzare l'utente dopo il login. –
Non ho letto tutti i dettagli, ma ho avuto l'impressione di aver discusso anche dei parametri di query. Scusa per il rumore allora. –