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,
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);
}

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';
@Injectable({
providedIn: 'root',
providedIn: null,
})
export class ServerTokenStorageService implements OAuthStorage {
private cookies: Map<string, string>;
private cookies: Map<string, string> = new Map();
constructor(@Inject('cookies') c: any) {
const cookies = JSON.parse(c);
this.cookies = new Map<string, string>();
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());
}
}
}

8
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<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);
return isPlatformBrowser(platformId) ? localStorage : new MockStorage();
return isPlatformBrowser(platformId)
? inject(BrowserTokenStorageService)
: inject(ServerTokenStorageService);
}

Loading…
Cancel
Save