diff --git a/Frontend/src/app/auth/auth.service.ts b/Frontend/src/app/auth/auth.service.ts index a958652..a7f3229 100644 --- a/Frontend/src/app/auth/auth.service.ts +++ b/Frontend/src/app/auth/auth.service.ts @@ -11,10 +11,10 @@ import jwt_decode from "jwt-decode"; }) export class AuthService { - webCredentials!: string; - apiToken!: string; - user!: User; - apiTokenExpirationTime!: Moment; + webCredentials?: string; + apiToken?: string; + user?: User; + apiTokenExpirationTime?: Moment; public isGoogleLibLoaded: BehaviorSubject = new BehaviorSubject(false); @@ -61,7 +61,7 @@ export class AuthService { // eslint-disable-next-line @typescript-eslint/no-explicit-any this.http$.post(`${environment.api.url}/auth/apiToken`, JSON.stringify(this.webCredentials), { headers: header }).subscribe({ next: (data) => { - this.user.id = data.id; + this.user!.id = data.id; this.apiToken = data.token; this.apiTokenExpirationTime = moment(data.expirationTime); resolve(data); @@ -80,7 +80,23 @@ export class AuthService { return !!this.apiToken && !!this.webCredentials && !!this.user && - this.apiTokenExpirationTime.isAfter(moment()); + this.apiTokenExpirationTime!.isAfter(moment()); + } + logoutHandler() { + this.logout(); + this.bc.postMessage({ + type: BroadcastType.LOGOUT + }); + } + logout() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + google.accounts.id.disableAutoSelect(); + this.apiToken = undefined; + this.webCredentials = undefined; + this.user = undefined; + this.apiTokenExpirationTime = undefined; + window.location.reload(); } // broadcastChannel createBroadcastChannel() { @@ -90,6 +106,7 @@ export class AuthService { } } broadcastListener(event: MessageEvent) { + console.log('BroadcastChannel message recieved', event.data.type); switch (event.data.type) { case BroadcastType.REQUEST_AUTH_DATA: this.sendAuthData(); @@ -98,6 +115,7 @@ export class AuthService { this.recieveAuthData(event.data.data!); break; case BroadcastType.LOGOUT: + this.logout(); break; default: break; @@ -109,14 +127,16 @@ export class AuthService { }); } sendAuthData() { - this.bc.postMessage({ - type: BroadcastType.SEND_AUTH_DATA, - data: { - webCredentials: this.webCredentials, - apiToken: this.apiToken, - apiTokenExpirationTime: this.apiTokenExpirationTime.toISOString() - } - }); + if (this.isAuthenticated()) { + this.bc.postMessage({ + type: BroadcastType.SEND_AUTH_DATA, + data: { + webCredentials: this.webCredentials, + apiToken: this.apiToken, + apiTokenExpirationTime: this.apiTokenExpirationTime?.toISOString() + } + }); + } } recieveAuthData(data: AuthData) { this.webCredentials = data.webCredentials; diff --git a/Frontend/src/app/interceptors/auth.interceptor.ts b/Frontend/src/app/interceptors/auth.interceptor.ts index 3402f04..2ce9f84 100644 --- a/Frontend/src/app/interceptors/auth.interceptor.ts +++ b/Frontend/src/app/interceptors/auth.interceptor.ts @@ -20,7 +20,7 @@ export class AuthInterceptor implements HttpInterceptor { intercept(request: HttpRequest, next: HttpHandler): Observable> { if (!request.url.includes('/auth/apiToken')) { - if (this.auth$.apiTokenExpirationTime.isBefore(moment.utc())) { + if (this.auth$.apiTokenExpirationTime?.isBefore(moment.utc())) { return this.auth$.getAPITokenObservable().pipe( mergeMap(() => { return next.handle(request.clone({ diff --git a/Frontend/src/app/views/main/main-view.component.html b/Frontend/src/app/views/main/main-view.component.html index 72642c6..ab564dc 100644 --- a/Frontend/src/app/views/main/main-view.component.html +++ b/Frontend/src/app/views/main/main-view.component.html @@ -27,16 +27,16 @@ {{environment.appName}}
- account_circle - account_circle + Profile photo
- Profile photo -

{{auth$.user.userName}}

+ Profile photo +

{{auth$.user?.userName}}

-