correction login

This commit is contained in:
trochas
2026-01-09 10:46:41 +01:00
parent 34f37b99cc
commit b4200cc029
2 changed files with 69 additions and 56 deletions

View File

@@ -2,7 +2,7 @@ import { useKeycloak } from '@react-keycloak/web'
import { useEffect } from 'react'; import { useEffect } from 'react';
import { Athlete, User } from '../classes'; import { Athlete, User } from '../classes';
import { useLocalData } from '../context/useLocalData'; import { useLocalData } from '../context/useLocalData';
import { postAthlete } from '../requetes'; import { loginOrRegister, postAthlete } from '../requetes';
import { clearAuthToken, setAuthToken } from '../api'; import { clearAuthToken, setAuthToken } from '../api';
import { AthleteDTO } from '../classesDTO'; import { AthleteDTO } from '../classesDTO';
@@ -10,7 +10,7 @@ export const Login =() =>{
const {user,setUser} = useLocalData() const {user,setUser} = useLocalData()
const { keycloak } = useKeycloak(); const { keycloak } = useKeycloak();
useEffect(() => { /*useEffect(() => {
const syncAndLoadUser = async () => { const syncAndLoadUser = async () => {
if (keycloak.authenticated && keycloak.token && keycloak.tokenParsed) { if (keycloak.authenticated && keycloak.token && keycloak.tokenParsed) {
try { try {
@@ -24,47 +24,39 @@ export const Login =() =>{
const athlete: Athlete = await postAthlete(newAthlete); const athlete: Athlete = await postAthlete(newAthlete);
setUser(athlete); 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) { } catch (error) {
console.error("Sync fetch failed:", error); console.error("Error :", error);
} }
}*/ }
};
syncAndLoadUser(); syncAndLoadUser();
}, [keycloak.authenticated, keycloak.token, setUser]); }, [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);
function handleLogin(): void { const logedUser = await loginOrRegister(keycloak);
keycloak.login(); console.log(logedUser);
//TODO setUser 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);
}
}
}
useEffect(() => {
loginUser()
},[keycloak.authenticated])
async function handleLogin() {
await keycloak.login();
} }
function handleLogout(): void { function handleLogout(): void {
@@ -81,9 +73,12 @@ export const Login =() =>{
<div> <div>
<div> <div>
Keycloak ID : { keycloak.tokenParsed?.sub} Keycloak ID : { keycloak.tokenParsed?.sub}
</div>
<div>
Prenom : { user.prenom}
</div> </div>
<div> <div>
User nom : { user.nom} Nom : { user.nom}
</div> </div>
</div> </div>

View File

@@ -15,28 +15,46 @@ export function delay(ms: number): Promise<void> {
/* /*
retourne l'utilisateur lié à l'identifiant keyloack retourne l'utilisateur lié à l'identifiant keyloack
*/ */
export async function getUser(keycloak:Keycloak): Promise<User|null>{ export async function loginOrRegister(keycloak:Keycloak): Promise<User|null>{
try { try {
const roles = keycloak.tokenParsed?.realm_access?.roles if(keycloak.tokenParsed!=null){
if(roles!=null){ const roles = keycloak.tokenParsed?.realm_access?.roles
if(roles.includes("admin")){ if(roles!=null){
const response = await athleteService.create(keycloak.tokenParsed); if(roles.includes("admin")){
const admin = new Admin(response.data); const id = keycloak.tokenParsed?.sub;
return admin; 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")){ else console.error("Error : role null");
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 : token Keylcoak null");
console.error("Error : pendant la récupération de l'User");
return null; return null;
} }
catch (error) { catch (error) {