Ich habe einen aktiven Schutz von angle2, der behandelt, wenn der Benutzer nicht angemeldet ist, ihn auf die Anmeldeseite umzuleiten:
import { Injectable } from "@angular/core";
import { CanActivate , ActivatedRouteSnapshot, RouterStateSnapshot, Router} from "@angular/router";
import {Observable} from "rxjs";
import {TokenService} from "./token.service";
@Injectable()
export class AuthenticationGuard implements CanActivate {
constructor (
private router : Router,
private token : TokenService
) { }
/**
* Check if the user is logged in before calling http
*
* @param route
* @param state
* @returns {boolean}
*/
canActivate (
route : ActivatedRouteSnapshot,
state : RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
if(this.token.isLoggedIn()){
return true;
}
this.router.navigate(['/login'],{ queryParams: { returnUrl: state.url }});
return;
}
}
Ich muss es auf jeder Route implementieren wie:
const routes: Routes = [
{ path : '', component: UsersListComponent, canActivate:[AuthenticationGuard] },
{ path : 'add', component : AddComponent, canActivate:[AuthenticationGuard]},
{ path : ':id', component: UserShowComponent },
{ path : 'delete/:id', component : DeleteComponent, canActivate:[AuthenticationGuard] },
{ path : 'ban/:id', component : BanComponent, canActivate:[AuthenticationGuard] },
{ path : 'edit/:id', component : EditComponent, canActivate:[AuthenticationGuard] }
];
Gibt es eine bessere Möglichkeit, die Option canActive zu implementieren, ohne sie jedem Pfad hinzuzufügen?
Was ich möchte, ist, es auf der Hauptroute hinzuzufügen, und es sollte für alle anderen Routen gelten. Ich habe viel gesucht, aber ich konnte keine nützliche Lösung finden
Vielen Dank