I ran into a problem with route guards with Angular.
My CanActivate guard is called twice when I go to a page that is not allowed because I have not logged in.
I have 1 root module, and there is my CanActivate guard and other services.
Thanks in advance!
Here is my router:
const appRoutes: Routes = [ { path: "", pathMatch: "full", redirectTo: "/meal-list", }, { path: "login", component: LoginComponent, }, { path: "meal-list", component: MealListComponent, canActivate: [AuthActivateGuard], } ]; export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes, {useHash: true});
and guard:
@Injectable() export class AuthActivateGuard implements CanActivate { constructor(private authService: AuthService, private router: Router) { console.log("guard created"); } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean { if (!this.authService.authenticated) { return this.authService.checkLogged().map(res => { this.authService.authenticated = true; return true; }).catch(()=> { this.authService.authenticated = false; this.router.navigate(["login"]); return Observable.of(false); }); } return true; } }
Simon source share