From 47ca56deb4b1c68ce49add72be2fb3eb24a80b56 Mon Sep 17 00:00:00 2001 From: Phan Huy Tran
login-success works!
diff --git a/frontend/src/app/login-success/login-success.component.ts b/frontend/src/app/login-success/login-success.component.ts new file mode 100644 index 0000000..5da8136 --- /dev/null +++ b/frontend/src/app/login-success/login-success.component.ts @@ -0,0 +1,25 @@ +import { Component, inject, OnInit } from '@angular/core'; +import { UserService } from '../service/user.service'; +import { KeycloakService } from 'keycloak-angular'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-login-success', + standalone: true, + imports: [], + templateUrl: './login-success.component.html', + styleUrl: './login-success.component.css' +}) +export class LoginSuccessComponent implements OnInit{ + private userService: UserService = inject(UserService); + private keycloakService: KeycloakService = inject(KeycloakService); + private router: Router = inject(Router); + + async ngOnInit() { + const userProfile = await this.keycloakService.loadUserProfile(); + const user = this.userService.getCurrentUser(userProfile); + sessionStorage.setItem('user', JSON.stringify(user)); + + // this.router.navigate(['']); + } +} diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts new file mode 100644 index 0000000..a195238 --- /dev/null +++ b/frontend/src/app/service/user.service.ts @@ -0,0 +1,34 @@ +import { inject, Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { KeycloakProfile } from 'keycloak-js'; +import { async } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class UserService { + private http: HttpClient = inject(HttpClient); + + public getUser(id: string) { + return this.http.get<{ keycloakId: string, username: string } | null>(`/backend/user/${id}`); + } + + public createUser(id: string, username: string) { + return this.http.post<{ keycloakId: string, username: string }>('/backend/user', { + keycloakId: id, + username: username, + }); + } + + public async getCurrentUser(userProfile: KeycloakProfile) { + if (userProfile.id == null) { + return; + } + return await this.getUser(userProfile.id).toPromise().then(async user => { + if (user) { + return user; + } + return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); + }); + } +} From df9fa9f2753089add8dcf54b911952d09f89e705 Mon Sep 17 00:00:00 2001 From: Constantin Simonis