From f5d1731793d0f15828ebefb383130a1cd90a9a88 Mon Sep 17 00:00:00 2001 From: Fahri Gedik Date: Wed, 30 Jul 2025 12:06:26 +0300 Subject: [PATCH] Refactor OAuth guard to use OAuthService and timer Replaces usage of AuthService.isAuthenticated and interval with OAuthService.hasValidAccessToken() and timer for checking authentication status. Also injects EnvironmentService to access OAuth configuration and updates logic to check responseType before waiting for authentication. --- .../oauth/src/lib/guards/oauth.guard.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts b/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts index e7f31643aa..1311a8d7a8 100644 --- a/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts +++ b/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts @@ -6,10 +6,10 @@ import { CanActivateFn, } from '@angular/router'; -import { Observable, interval, filter, take, map, firstValueFrom, timeout, catchError, of } from 'rxjs'; +import { Observable, timer, filter, take, map, firstValueFrom, timeout, catchError, of } from 'rxjs'; import { OAuthService } from 'angular-oauth2-oidc'; -import { AuthService, IAbpGuard } from '@abp/ng.core'; +import { AuthService, IAbpGuard, EnvironmentService } from '@abp/ng.core'; /** * @deprecated Use `abpOAuthGuard` *function* instead. @@ -58,14 +58,17 @@ export const asyncAbpOAuthGuard: CanActivateFn = ( route: ActivatedRouteSnapshot, state: RouterStateSnapshot, ) => { + const oAuthService = inject(OAuthService); const authService = inject(AuthService); - const code = new URLSearchParams(window.location.search).get('code'); + const environmentService = inject(EnvironmentService); + + const { oAuthConfig } = environmentService.getEnvironment(); - if (code) { + if (oAuthConfig?.responseType === 'code') { return firstValueFrom( - interval(100).pipe( - map(() => authService.isAuthenticated), - filter(isAuthenticated => isAuthenticated), + timer(0, 100).pipe( + map(() => oAuthService.hasValidAccessToken()), + filter(Boolean), take(1), timeout(3000), catchError(() => { @@ -76,7 +79,7 @@ export const asyncAbpOAuthGuard: CanActivateFn = ( ); } - if (authService.isAuthenticated) { + if (oAuthService.hasValidAccessToken()) { return true; }