From fa443931668bb43f8360d0bc811a772bd8af8c56 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 30 May 2025 11:30:10 +0300 Subject: [PATCH] server token storage service refactored --- .../lib/providers/oauth-module-config.provider.ts | 12 +++++++----- .../lib/services/server-token-storage.service.ts | 15 ++++++++------- .../oauth/src/lib/utils/storage.factory.ts | 8 ++++++-- 3 files changed, 21 insertions(+), 14 deletions(-) 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 81ba80c626..7e10bb70bd 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 @@ -36,10 +36,6 @@ export function provideAbpOAuth({ ssr = false }: { ssr?: boolean }) { provide: ApiInterceptor, useClass: OAuthApiInterceptor, }, - { - provide: OAuthStorage, - useFactory: oAuthStorageFactory, - }, { provide: PIPE_TO_LOGIN_FN_KEY, useValue: pipeToLogin, @@ -60,10 +56,16 @@ export function provideAbpOAuth({ ssr = false }: { ssr?: boolean }) { OAuthModule.forRoot().providers as Provider[], { provide: OAuthStorage, - useClass: ssr ? ServerTokenStorageService : BrowserTokenStorageService, + useFactory: oAuthStorageFactory, }, { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, ]; + console.log('ssr --->>>>', ssr); + if (ssr) { + providers.push(ServerTokenStorageService); + } else { + providers.push(BrowserTokenStorageService); + } return makeEnvironmentProviders(providers); } diff --git a/npm/ng-packs/packages/oauth/src/lib/services/server-token-storage.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/server-token-storage.service.ts index b3c68aec3e..508360ca7c 100644 --- a/npm/ng-packs/packages/oauth/src/lib/services/server-token-storage.service.ts +++ b/npm/ng-packs/packages/oauth/src/lib/services/server-token-storage.service.ts @@ -2,16 +2,17 @@ import { Inject, Injectable } from '@angular/core'; import { OAuthStorage } from 'angular-oauth2-oidc'; @Injectable({ - providedIn: 'root', + providedIn: null, }) export class ServerTokenStorageService implements OAuthStorage { - private cookies: Map; + private cookies: Map = new Map(); constructor(@Inject('cookies') c: any) { - const cookies = JSON.parse(c); - this.cookies = new Map(); - - for (const cookie of cookies) { - this.cookies.set(cookie.key, cookie.value); + const cookieItems = c.split(';'); + for (const item of cookieItems) { + const [key, value] = item.split('='); + if (key && value) { + this.cookies.set(key.trim(), value.trim()); + } } } diff --git a/npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts b/npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts index 2194abdf69..e5c57bd110 100644 --- a/npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts +++ b/npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts @@ -1,5 +1,7 @@ import { inject, PLATFORM_ID } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; +import { ServerTokenStorageService } from '../services/server-token-storage.service'; +import { BrowserTokenStorageService } from '../services'; export class MockStorage implements Storage { private data = new Map(); @@ -23,7 +25,9 @@ export class MockStorage implements Storage { } } -export function oAuthStorageFactory(): Storage { +export function oAuthStorageFactory(): ServerTokenStorageService | BrowserTokenStorageService { const platformId = inject(PLATFORM_ID); - return isPlatformBrowser(platformId) ? localStorage : new MockStorage(); + return isPlatformBrowser(platformId) + ? inject(BrowserTokenStorageService) + : inject(ServerTokenStorageService); }