correction login
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
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 {
|
useEffect(() => {
|
||||||
keycloak.login();
|
loginUser()
|
||||||
//TODO setUser
|
},[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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user