Browse Source

Add app initializer to handle OAuth code flow

Introduces an app initializer that checks for an OAuth authorization code in the URL. If present, it waits for authentication to complete, and if not authenticated within 3 seconds, redirects to the login page. This improves handling of OAuth login flows.
issue-23286
Fahri Gedik 7 months ago
parent
commit
07cbaeaa08
  1. 21
      npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts

21
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 },

Loading…
Cancel
Save