diff --git a/front_end/src/components/login.tsx b/front_end/src/components/login.tsx index 625df14..34e3902 100644 --- a/front_end/src/components/login.tsx +++ b/front_end/src/components/login.tsx @@ -2,7 +2,7 @@ import { useKeycloak } from '@react-keycloak/web' import { useEffect } from 'react'; import { Athlete, User } from '../classes'; import { useLocalData } from '../context/useLocalData'; -import { postAthlete } from '../requetes'; +import { loginOrRegister, postAthlete } from '../requetes'; import { clearAuthToken, setAuthToken } from '../api'; import { AthleteDTO } from '../classesDTO'; @@ -10,7 +10,7 @@ export const Login =() =>{ const {user,setUser} = useLocalData() const { keycloak } = useKeycloak(); - useEffect(() => { + /*useEffect(() => { const syncAndLoadUser = async () => { if (keycloak.authenticated && keycloak.token && keycloak.tokenParsed) { try { @@ -24,47 +24,39 @@ export const Login =() =>{ const athlete: Athlete = await postAthlete(newAthlete); setUser(athlete); - } catch (error) { - console.error("Error :", error); - } - } - }; - /*postAthlete - if (keycloak.authenticated && keycloak.token) { - const tokenParsed = keycloak.tokenParsed; - setUser( - - { - id: 0, - keycloakId: tokenParsed!.sub!, - email: tokenParsed?.email || "", - nom: tokenParsed?.family_name || "", - prenom: tokenParsed?.given_name || "", - sessions: [] - } - ); - try { - const response = await fetch("http://localhost:8081/api/users/sync", { - method: "POST", - headers: { - "Authorization": `Bearer ${keycloak.token}`, - "Content-Type": "application/json" - }, - }); - console.log("Sync status:", response.status); } catch (error) { - console.error("Sync fetch failed:", error); + console.error("Error :", error); } - }*/ - + } + }; syncAndLoadUser(); }, [keycloak.authenticated, keycloak.token, setUser]); + */ + async function loginUser(){ + if(keycloak.authenticated){ + setAuthToken(keycloak.token); + //alert("Connexion en cours : " + keycloak.tokenParsed?.sub + " " + keycloak.tokenParsed?.realm_access?.roles); + + const logedUser = await loginOrRegister(keycloak); + console.log(logedUser); + if(logedUser!==null){ + setUser(logedUser); + // alert("Connexion avec succès ! " + keycloak.tokenParsed?.sub); + } + else{ + alert("Erreur de connexion " + keycloak.tokenParsed?.sub + " " + keycloak.tokenParsed?.realm_access?.roles); + } + } + } - function handleLogin(): void { - keycloak.login(); - //TODO setUser + useEffect(() => { + loginUser() + },[keycloak.authenticated]) + + async function handleLogin() { + await keycloak.login(); } function handleLogout(): void { @@ -81,9 +73,12 @@ export const Login =() =>{
Keycloak ID : { keycloak.tokenParsed?.sub} +
+
+ Prenom : { user.prenom}
- User nom : { user.nom} + Nom : { user.nom}
diff --git a/front_end/src/requetes.tsx b/front_end/src/requetes.tsx index 4f5db60..1424def 100644 --- a/front_end/src/requetes.tsx +++ b/front_end/src/requetes.tsx @@ -15,28 +15,46 @@ export function delay(ms: number): Promise { /* retourne l'utilisateur lié à l'identifiant keyloack */ -export async function getUser(keycloak:Keycloak): Promise{ +export async function loginOrRegister(keycloak:Keycloak): Promise{ try { - const roles = keycloak.tokenParsed?.realm_access?.roles - if(roles!=null){ - if(roles.includes("admin")){ - const response = await athleteService.create(keycloak.tokenParsed); - const admin = new Admin(response.data); - return admin; + if(keycloak.tokenParsed!=null){ + const roles = keycloak.tokenParsed?.realm_access?.roles + if(roles!=null){ + if(roles.includes("admin")){ + const id = keycloak.tokenParsed?.sub; + if(id!=null){ + const response = await athleteService.getByKeycloakId(id); + const admin = new Admin(response.data); + return admin; + } + } + else if(roles.includes("coach")){ + const id = keycloak.tokenParsed?.sub; + if(id!=null){ + const response = await coachService.getByKeycloakId(id); + const coach = new Coach(response.data); + return coach; + } + } + else if(roles.includes("athlete")){ + console.error("role = Athlete"); + const newAthlete: Athlete = new Athlete(); + newAthlete.keycloakId = keycloak.tokenParsed.sub || ""; + newAthlete.email = keycloak.tokenParsed.email || ""; + newAthlete.nom = keycloak.tokenParsed.family_name || ""; + newAthlete.prenom = keycloak.tokenParsed.given_name || ""; + const response = await athleteService.create(newAthlete.toDTO()); + console.log(response); + const athlete = new Athlete(response.data); + console.log(athlete); + return athlete; + } + else console.error("Error : role inconnu"); } - else if(roles.includes("coach")){ - const response = await coachService.create(keycloak.tokenParsed); - const coach = new Coach(response.data); - return coach; - } - else if(roles.includes("athletes")){ - const response = await athleteService.create(keycloak.tokenParsed); - const athlete = new Athlete(response.data); - return athlete; - } - console.error("Error roles inconnu"); + else console.error("Error : role null"); } - + else console.error("Error : token Keylcoak null"); + console.error("Error : pendant la récupération de l'User"); return null; } catch (error) {