Come accennato, Angular Route Guards sono un buon modo per implementare percorsi condizionali. Poiché Angular Tutorial è un po 'prolisso sull'argomento, ecco un breve riassunto su come usarli con un esempio.
1. Esistono diversi tipi di protezioni. Se hai bisogno di qualcosa della logica if (loggedIn) {go to "/dashboard"} else { go to "/login"}
, allora quello che stai cercando è il CanActivate
-Guard. CanActivate può essere letto come "La nuova route X può essere attivata se tutte le condizioni Y sono soddisfatte". Puoi anche definire effetti collaterali come i reindirizzamenti. Se questo non si adatta alla tua logica, controlla la pagina Esercitazione angolare per vedere gli altri tipi di guardie.
2. Creare un auth-guard.service.ts
.
3. popolano la auth-guard.service.ts
con il seguente codice:
import { Injectable } from '@angular/core';
import {CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot} from '@angular/router';
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(
private router: Router
) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const isLoggedIn = false; // ... your login logic here
if (isLoggedIn) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
}
4. registrare l'auth-guard.service.ts nel percorso-modulo. Inoltre, aggiungi la coppia chiave-valore canActivate:[AuthGuardService]
a tutte le rotte che vuoi sorvegliare. Dovrebbe essere un po 'come questo:
const appRoutes: Routes = [
{ path: '', component: LandingComponent},
{ path: 'login', component: LoginComponent},
{ path: 'signup', component: SignUpComponent},
{ path: 'home', component: HomeComponent, canActivate: [AuthGuardService]},
{ path: 'admin', component: AdminComponent, canActivate: [AuthGuardService]},
{ path: '**', component: PageNotFoundComponent }
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes)
],
exports: [
RouterModule
],
providers: [
AuthGuardService
]
})
export class AppRoutingModule { }
Questo dovrebbe iniziare.
Ecco una demo minimalista: https://stackblitz.com/edit/angular-gltybk
ho mai pensato .. Penso che funzionerebbe. – user3884414
Mi piacerebbe vedere un esempio chiaro di questo. Ho un'estensione dell'outlet Router e puoi prendere il percorso prima di essere indirizzato, ho aggiunto alcuni diritti utente in RouteDefinitions, così posso verificare se l'utente è autorizzato. Ma ho una sub-tratta, che voglio essere diversa per gli amministratori (vedi tutti gli utenti invece del profilo). Penso che per ora devo definire una logica specifica nella pagina predefinita, ma non è quello che voglio veramente. –