Petit ajustement

Petit ajustement du frontend pour l'affichage des options disponibles et la restriction des routes en fonction de la connexion. Enlever la nécessité du token pour récupérer les authActive, puisqu'on n'est pas encore connecté à ce stade.
This commit is contained in:
MathieuSevignyLavallee 2024-09-30 11:07:23 -04:00
parent f379ddcb28
commit ab3925885a
3 changed files with 94 additions and 68 deletions

View file

@ -1,5 +1,4 @@
// App.tsx
import { Routes, Route } from 'react-router-dom';
import { Routes, Route, Navigate } from 'react-router-dom';
// Page main
import Home from './pages/Home/Home';
@ -27,20 +26,16 @@ import ApiService from './services/ApiService';
const handleLogout = () => {
ApiService.logout();
}
};
const isLoggedIn = () => {
return ApiService.isLoggedIn();
}
};
function App() {
return (
<div className="content">
<Header
isLoggedIn={isLoggedIn}
handleLogout={handleLogout}/>
<Header isLoggedIn={isLoggedIn} handleLogout={handleLogout} />
<div className="app">
<main>
<Routes>
@ -51,20 +46,35 @@ function App() {
<Route path="/teacher/login" element={<Login />} />
<Route path="/teacher/register" element={<Register />} />
<Route path="/teacher/resetPassword" element={<ResetPassword />} />
<Route path="/teacher/dashboard" element={<Dashboard />} />
<Route path="/teacher/share/:id" element={<Share />} />
<Route path="/teacher/editor-quiz/:id" element={<QuizForm />} />
<Route path="/teacher/manage-room/:id" element={<ManageRoom />} />
{/* Routes protégées : redirection si l'utilisateur n'est pas connecté */}
<Route
path="/teacher/dashboard"
element={isLoggedIn() ? <Dashboard /> : <Navigate to="/auth-selection" />}
/>
<Route
path="/teacher/share/:id"
element={isLoggedIn() ? <Share /> : <Navigate to="/auth-selection" />}
/>
<Route
path="/teacher/editor-quiz/:id"
element={isLoggedIn() ? <QuizForm /> : <Navigate to="/auth-selection" />}
/>
<Route
path="/teacher/manage-room/:id"
element={isLoggedIn() ? <ManageRoom /> : <Navigate to="/auth-selection" />}
/>
{/* Pages espace étudiant */}
<Route path="/student/join-room" element={<JoinRoom />} />
<Route path="/student/join-room" element={isLoggedIn() ? <JoinRoom /> : <Navigate to="/auth-selection" />}
/>
{/* Pages authentification selection */}
{/* Pages authentification sélection */}
<Route path="/auth-selection" element={<AuthSelection />} />
</Routes>
</main>
</div>
<Footer/>
<Footer />
</div>
);
}

View file

@ -1,10 +1,12 @@
import React, { useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import './authselection.css';
const AuthSelection: React.FC = () => {
const [simpleLoginData, setSimpleLoginData] = useState({ username: '', password: '' });
const [authData, setAuthData] = useState<any>(null); // Stocke les données d'auth
const navigate = useNavigate();
// Récupérer les données d'authentification depuis l'API
useEffect(() => {
const fetchAuthData = async () => {
@ -19,15 +21,18 @@ const AuthSelection: React.FC = () => {
};
fetchAuthData(); // Appel de la fonction pour récupérer les données
}, []);
const handleSimpleLoginChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setSimpleLoginData((prev) => ({ ...prev, [name]: value }));
};
const handleSimpleLoginSubmit = (e: React.FormEvent) => {
e.preventDefault();
// Logique d'authentification pour Simple Login
console.log('Simple Login Data:', simpleLoginData);
};
const handleAuthLogin = (provider: string) => {
window.location.href = 'http://localhost:3000/api/auth/' + provider;
};
@ -35,7 +40,9 @@ const AuthSelection: React.FC = () => {
return (
<div className="auth-selection-page">
<h1>Connexion</h1>
{/* Formulaire de connexion simple */}
{/* Formulaire de connexion Simple Login */}
{authData && authData['simple-login'] && (
<div className="form-container">
<form onSubmit={handleSimpleLoginSubmit}>
<input
@ -57,10 +64,13 @@ const AuthSelection: React.FC = () => {
<button type="submit">Se connecter</button>
</form>
</div>
)}
{/* Conteneur OAuth */}
{authData && Object.keys(authData).some(key => authData[key].type === 'oauth') && (
<div className="oauth-container">
<h2>Se connecter avec OAuth</h2>
{authData && Object.keys(authData).map((providerKey) => {
{Object.keys(authData).map((providerKey) => {
const provider = authData[providerKey];
if (provider.type === 'oauth') {
return (
@ -72,14 +82,17 @@ const AuthSelection: React.FC = () => {
return null;
})}
</div>
)}
{/* Conteneur OIDC */}
{authData && Object.keys(authData).some(key => authData[key].type === 'oidc') && (
<div className="oidc-container">
<h2>Se connecter avec OIDC</h2>
{authData && Object.keys(authData).map((providerKey) => {
{Object.keys(authData).map((providerKey) => {
const provider = authData[providerKey];
if (provider.type === 'oidc') {
return (
<button key={providerKey} className="provider-btn oauth-btn" onClick={() => handleAuthLogin(providerKey)}>
<button key={providerKey} className="provider-btn oidc-btn" onClick={() => handleAuthLogin(providerKey)}>
Continuer avec {providerKey}
</button>
);
@ -87,10 +100,13 @@ const AuthSelection: React.FC = () => {
return null;
})}
</div>
)}
<div>
<button className="home-button-container" onClick={() => navigate('/')}>Retour à l'accueil</button>
</div>
</div>
);
};
export default AuthSelection;

View file

@ -4,6 +4,6 @@ const jwt = require('../middleware/jwtToken.js');
const authController = require('../controllers/auth.js')
router.get("/getActiveAuth",jwt.authenticate, authController.getActive);
router.get("/getActiveAuth",authController.getActive);
module.exports = router;