From c4e9fc357590a0eab63b4536ba7f4f8934affad8 Mon Sep 17 00:00:00 2001 From: manuconcepbrito <manu041196@gmail.com> Date: Wed, 6 Oct 2021 19:23:17 +0200 Subject: [PATCH] Logout for Management Consumer --- wahlfang_web/src/api/index.js | 5 ++++ wahlfang_web/src/pages/ManagementApp.js | 9 +++++++ wahlfang_web/src/pages/management/Logout.js | 26 +++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 wahlfang_web/src/pages/management/Logout.js diff --git a/wahlfang_web/src/api/index.js b/wahlfang_web/src/api/index.js index 926ac6c..40d4281 100644 --- a/wahlfang_web/src/api/index.js +++ b/wahlfang_web/src/api/index.js @@ -85,6 +85,11 @@ export const logoutVoter = async () => { return true; } +export const logoutManager = async () => { + localStorage.removeItem("managerToken"); + return true; +} + export const fetchSpectatorInfo = async (uuid) => { const response = await makeRequest(`/vote/spectator/${uuid}/`, 'GET'); if (response.status === 200) { diff --git a/wahlfang_web/src/pages/ManagementApp.js b/wahlfang_web/src/pages/ManagementApp.js index 21347e4..a7a09f6 100644 --- a/wahlfang_web/src/pages/ManagementApp.js +++ b/wahlfang_web/src/pages/ManagementApp.js @@ -9,6 +9,8 @@ import {loadManagerToken, refreshManagerToken} from "../api/management"; import Help from "./management/Help"; import {managementWS} from "../websocket"; import Header from "../components/Header"; +import Logout from "./vote/Logout"; +import AuthenticatedRoute from "../components/AuthenticatedRoute"; export default function ManagementApp() { @@ -56,6 +58,13 @@ export default function ManagementApp() { <Route exact path={`${path}/help`}> <Help/> </Route> + <AuthenticatedRoute> + <Route exact path="/logout"> + <Suspense fallback={<Loading/>}> + <Logout/> + </Suspense> + </Route> + </AuthenticatedRoute> </Switch> </div> )} diff --git a/wahlfang_web/src/pages/management/Logout.js b/wahlfang_web/src/pages/management/Logout.js new file mode 100644 index 0000000..b5b5c16 --- /dev/null +++ b/wahlfang_web/src/pages/management/Logout.js @@ -0,0 +1,26 @@ +import React, {useEffect} from "react"; +import Layout from "../../components/Layout"; +import {useSetRecoilState} from "recoil"; +import {isManagerAuthenticated} from "../../state/management"; +import Loading from "../../components/Loading"; +import {logoutVoter} from "../../api"; + + +export default function Logout() { + const setAuthenticated = useSetRecoilState(isManagerAuthenticated); + + useEffect(() => { + logoutVoter().then(result => { + setAuthenticated(false); + // TODO: this is a very hacky way of reloading the whole app such that the recoil app state is reset. + // TODO: find a saner way of resetting the recoil state without having to force reload the whole page. + window.location.assign('/'); + }); + }) + + return ( + <Layout title="logout"> + <Loading/> + </Layout> + ); +} -- GitLab