Skip to content Skip to sidebar Skip to footer

Angular2: How To "reload" Page With Router (recheck Canactivate)?

I have routers with canActivate: [ AuthGuard ] and validation inside AuthGuard How to force check canActivate in same router url ? For example: Current route is /admin and I have g

Solution 1:

My temporary solution:

auth.service.ts

import { Injectable, Injector } from '@angular/core';
import { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';

@Injectable()
export classAuthService{

  constructor(private route: ActivatedRoute,
              private router: Router,
              private injector: Injector) {
    this.forceRunAuthGuard();
  }

  // Dirty hack for angular2 routing recheckprivate forceRunAuthGuard() {
    if (this.route.root.children.length) {
      // gets current routeconst curr_route = this.route.root.children[ '0' ];
      // gets first guard classconst AuthGuard = curr_route.snapshot.routeConfig.canActivate[ '0' ];
      // injects guardconst authGuard = this.injector.get(AuthGuard);
      // makes custom RouterStateSnapshot objectconst routerStateSnapshot: RouterStateSnapshot = Object.assign({}, curr_route.snapshot, { url: this.router.url });
      // runs canActivate
      authGuard.canActivate(curr_route.snapshot, routerStateSnapshot);
    }
  }

}

app.routes.ts

  { path:'faq', canActivate: [ AuthGuard ], component:FaqComponent },
  { path:'about', canActivate: [ AuthGuard ], component:AboutUsComponent },
  { path:'upgrade', canActivate: [ AuthGuard ], component:UpgradeComponent },

This code runs AuthGuard again.

Post a Comment for "Angular2: How To "reload" Page With Router (recheck Canactivate)?"