angular - Hvordan sende parameter til guard?


Jeg har prosjektbasert Angular 12.

Jeg trenger å sikre en rute basert på en parameter som kalles token:

 export const authenticationRoutes = [
  {
    path: 'reset-password/token/:token',
    component: ResetPasswordShellComponent,
    canActivate: [ResetPasswordGuard]
  }
];

ResetPasswordGuard er en vakt som gjør kall til webtjeneste og skal sende tokenverdien som er en del av stien:

path: 'reset-password/token/:token'

Mitt spørsmål er om det finnes en måte å sende tokenverdien fra stien til guarden (ResetPasswordGuard) slik at den blir sendt til webtjenesten?

Svar #1

Når vi implementerer grensesnittet CanActivate på ResetPasswordGuard, tar funksjonen canActivate 2 parametere, hvorav den første er ActivatedRouteSnapshot...

canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): boolean {
        // your  logic goes here
        console.log('[ResetPasswordGuard]', next.params); // <-- This should print {token: 'somevalue'}
        ....
        ....
    }

Så man kan enkelt lese stive parametere fra det ved å bruke...

const tokenInPath = next.params.token || ''

Ved å bruke en ActivatedRouteSnapshot har man tilgang til alle dataene i URL-en. ActivatedRouteSnapshot gir også Observable-grensesnitt for å lese/motta ønsket informasjon (stive parametere, spørringsparametere osv...).


WYSIWYG => DET DU SER ER DET DU FÅR :

Relaterte artikler