diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts index 92ecc86012..f3b475a434 100644 --- a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts +++ b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts @@ -9,12 +9,14 @@ import { AuthErrorFilterService, } from '@abp/ng.core'; import { Provider, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core'; +import { interval, filter, take, map, firstValueFrom, timeout, catchError, of } from 'rxjs'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; import { AbpOAuthGuard, abpOAuthGuard } from '../guards'; import { OAuthConfigurationHandler } from '../handlers'; import { OAuthApiInterceptor } from '../interceptors'; import { AbpOAuthService, OAuthErrorFilterService } from '../services'; + import { pipeToLogin, checkAccessToken } from '../utils'; import { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider'; @@ -53,6 +55,25 @@ export function provideAbpOAuth() { provideAppInitializer(() => { inject(OAuthConfigurationHandler); }), + provideAppInitializer(async () => { + const authService = inject(AuthService); + const code = new URLSearchParams(window.location.search).get('code'); + if (code) { + return firstValueFrom( + interval(100).pipe( + map(() => authService.isAuthenticated), + filter(isAuthenticated => isAuthenticated), + take(1), + timeout(3000), + catchError(() => { + authService.navigateToLogin(); + return of(null); + }) + ) + ); + } + return Promise.resolve(); + }), OAuthModule.forRoot().providers as Provider[], { provide: OAuthStorage, useClass: AbpLocalStorageService }, { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },