Ho un'applicazione angolare 2 in cui devo essere autenticato su ogni pagina. Quindi ho implementato un RouterOutlet personalizzato per confermare che ho effettuato l'accesso ad ogni cambio di pagina.Angolare 2 Autenticazione con percorsi figlio
@Directive({
selector: 'auth-outlet'
})
export class AuthOutlet extends RouterOutlet {
publicRoutes: any;
private parentRouter: Router;
private authService: AuthService;
constructor(_elementRef: ElementRef,
_loader: DynamicComponentLoader,
_parentRouter: Router,
@Attribute('name') nameAttr: string,
_authService: AuthService) {
super(_elementRef, _loader, _parentRouter, nameAttr);
this.parentRouter = _parentRouter;
this.authService = _authService;
this.publicRoutes = {
'Login': true
};
}
activate(oldInstruction: ComponentInstruction) {
var url = this.parentRouter.lastNavigationAttempt;
console.log('attemping to nav');
if (!this.publicRoutes[url] && !this.authService.loggedIn){
var newInstruction = new ComponentInstruction('Login', [], new RouteData(), Login, false, 1);
return super.activate(newInstruction);
} else {
return super.activate(oldInstruction);
}
}
}
Ecco un codice di lavoro: http://plnkr.co/edit/YnQv7Mh9Lxc0l0dgAo7B?p=preview
Esiste un modo migliore per intercettare i cambiamenti di rotta e reindirizzare per il login quando l'utente non è autenticato?
Superlativo !! Cos'altro hai bisogno !! – micronyks
Bene, per prima cosa non si dovrebbe creare una ComponentInstruction. Quindi questo ha già dei problemi. Inoltre presenta problemi se ti trovi in una rotta secondaria che non conosce la rotta di accesso. (Ho lavorato su questo problema con il poster) –
Se qualcuno collega i collegamenti alla pagina, il server viene coinvolto e tu fai un controllo di autenticazione sul server. Se qualcuno è autorizzato, entra nella tua app. Una volta nella tua app, possono muoversi liberamente. Il browser e js non dovrebbero fare controlli di autenticazione qui, il server dovrebbe. –