From 9f0ee05768c0e1af69d23cf2e5ee2eca1bc3392c Mon Sep 17 00:00:00 2001 From: Bruno Roesner Date: Tue, 22 Oct 2024 10:24:17 -0400 Subject: [PATCH] populate join-room username if authenticated (temp solution) --- .../AuthManager/callback/AuthCallback.tsx | 2 ++ .../src/pages/Student/JoinRoom/JoinRoom.tsx | 4 ++- client/src/services/ApiService.tsx | 25 +++++++++++++++++++ server/auth/auth-manager.js | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/client/src/pages/AuthManager/callback/AuthCallback.tsx b/client/src/pages/AuthManager/callback/AuthCallback.tsx index 6ba290d..046abc7 100644 --- a/client/src/pages/AuthManager/callback/AuthCallback.tsx +++ b/client/src/pages/AuthManager/callback/AuthCallback.tsx @@ -9,9 +9,11 @@ const OAuthCallback: React.FC = () => { useEffect(() => { const searchParams = new URLSearchParams(location.search); const user = searchParams.get('user'); + const username = searchParams.get('username'); if (user) { apiService.saveToken(user); + apiService.saveUsername(username || ""); navigate('/'); } else { navigate('/login'); diff --git a/client/src/pages/Student/JoinRoom/JoinRoom.tsx b/client/src/pages/Student/JoinRoom/JoinRoom.tsx index e29bfb7..75516b0 100644 --- a/client/src/pages/Student/JoinRoom/JoinRoom.tsx +++ b/client/src/pages/Student/JoinRoom/JoinRoom.tsx @@ -15,9 +15,11 @@ import LoadingButton from '@mui/lab/LoadingButton'; import LoginContainer from '../../../components/LoginContainer/LoginContainer' +import ApiService from '../../../services/ApiService' + const JoinRoom: React.FC = () => { const [roomName, setRoomName] = useState(''); - const [username, setUsername] = useState(''); + const [username, setUsername] = useState(ApiService.getUsername()); const [socket, setSocket] = useState(null); const [isWaitingForTeacher, setIsWaitingForTeacher] = useState(false); const [question, setQuestion] = useState(); diff --git a/client/src/services/ApiService.tsx b/client/src/services/ApiService.tsx index 909f29b..b63bbdd 100644 --- a/client/src/services/ApiService.tsx +++ b/client/src/services/ApiService.tsx @@ -105,6 +105,30 @@ class ApiService { } } + public saveUsername(username: string): void { + if (!username || username.length === 0) { + return; + } + + const object = { + username: username + } + + localStorage.setItem("username", JSON.stringify(object)); + } + + public getUsername(): string { + const objectStr = localStorage.getItem("username"); + + if (!objectStr) { + return ""; + } + + const object = JSON.parse(objectStr) + + return object.username; + } + // Route to know if rooms need authentication to join public async getRoomsRequireAuth(): Promise { const url: string = this.constructRequestUrl(`/auth/getRoomsRequireAuth`); @@ -117,6 +141,7 @@ class ApiService { } public logout(): void { + localStorage.removeItem("username"); return localStorage.removeItem("jwt"); } diff --git a/server/auth/auth-manager.js b/server/auth/auth-manager.js index fce031e..27082f9 100644 --- a/server/auth/auth-manager.js +++ b/server/auth/auth-manager.js @@ -44,7 +44,7 @@ class AuthManager{ async login(userInfo,req,res,next){ const tokenToSave = jwt.create(userInfo.email, userInfo._id,userInfo.roles); - res.redirect(`/auth/callback?user=${tokenToSave}`); + res.redirect(`/auth/callback?user=${tokenToSave}&username=${userInfo.name}`); console.info(`L'utilisateur '${userInfo.name}' vient de se connecter`) }