我正在编写一个防护程序,可以防止用户在未经身份验证时访问目标网址。我正在编写一个functional guard来实现此目的,但是当我尝试通过界面访问(目标)url 时RouterStateSnapshot,我收到一个空字符串。
在下文中,stackblitz您将发现上述问题的最小重现性。(角度 15.1.2)
https://stackblitz.com/edit/angular-ft2rvr
实施functional guard:
import { inject } from '@angular/core';
import { Router } from '@angular/router';
import { OAuthService } from 'angular-oauth2-oidc';
export const authGuard = () => {
const router = inject(Router);
const oAuthService = inject(OAuthService);
const hasAccessToken = oAuthService.hasValidAccessToken();
const hasIdToken = oAuthService.hasValidIdToken();
console.log('targeUrl', router.routerState.snapshot.url); // router.routerState.snapshot.url returns empty string
if (!hasAccessToken || !hasIdToken) {
router.navigate(['authenticate'], {
state: {
targetUrl: router.routerState.snapshot.url,
},
});
}
return hasAccessToken; …Run Code Online (Sandbox Code Playgroud)