Browse Source

server token storage service refactored

feature/ssr-migration-schematic
erdemcaygor 1 year ago
parent
commit
fa44393166
  1. 12
      npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts
  2. 15
      npm/ng-packs/packages/oauth/src/lib/services/server-token-storage.service.ts
  3. 8
      npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts

12
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, provide: ApiInterceptor,
useClass: OAuthApiInterceptor, useClass: OAuthApiInterceptor,
}, },
{
provide: OAuthStorage,
useFactory: oAuthStorageFactory,
},
{ {
provide: PIPE_TO_LOGIN_FN_KEY, provide: PIPE_TO_LOGIN_FN_KEY,
useValue: pipeToLogin, useValue: pipeToLogin,
@ -60,10 +56,16 @@ export function provideAbpOAuth({ ssr = false }: { ssr?: boolean }) {
OAuthModule.forRoot().providers as Provider[], OAuthModule.forRoot().providers as Provider[],
{ {
provide: OAuthStorage, provide: OAuthStorage,
useClass: ssr ? ServerTokenStorageService : BrowserTokenStorageService, useFactory: oAuthStorageFactory,
}, },
{ provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },
]; ];
console.log('ssr --->>>>', ssr);
if (ssr) {
providers.push(ServerTokenStorageService);
} else {
providers.push(BrowserTokenStorageService);
}
return makeEnvironmentProviders(providers); return makeEnvironmentProviders(providers);
} }

15
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'; import { OAuthStorage } from 'angular-oauth2-oidc';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: null,
}) })
export class ServerTokenStorageService implements OAuthStorage { export class ServerTokenStorageService implements OAuthStorage {
private cookies: Map<string, string>; private cookies: Map<string, string> = new Map();
constructor(@Inject('cookies') c: any) { constructor(@Inject('cookies') c: any) {
const cookies = JSON.parse(c); const cookieItems = c.split(';');
this.cookies = new Map<string, string>(); for (const item of cookieItems) {
const [key, value] = item.split('=');
for (const cookie of cookies) { if (key && value) {
this.cookies.set(cookie.key, cookie.value); this.cookies.set(key.trim(), value.trim());
}
} }
} }

8
npm/ng-packs/packages/oauth/src/lib/utils/storage.factory.ts

@ -1,5 +1,7 @@
import { inject, PLATFORM_ID } from '@angular/core'; import { inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common'; import { isPlatformBrowser } from '@angular/common';
import { ServerTokenStorageService } from '../services/server-token-storage.service';
import { BrowserTokenStorageService } from '../services';
export class MockStorage implements Storage { export class MockStorage implements Storage {
private data = new Map<string, string>(); private data = new Map<string, string>();
@ -23,7 +25,9 @@ export class MockStorage implements Storage {
} }
} }
export function oAuthStorageFactory(): Storage { export function oAuthStorageFactory(): ServerTokenStorageService | BrowserTokenStorageService {
const platformId = inject(PLATFORM_ID); const platformId = inject(PLATFORM_ID);
return isPlatformBrowser(platformId) ? localStorage : new MockStorage(); return isPlatformBrowser(platformId)
? inject(BrowserTokenStorageService)
: inject(ServerTokenStorageService);
} }

Loading…
Cancel
Save