diff --git a/wahlfang_web/src/api/index.js b/wahlfang_web/src/api/index.js
index 926ac6c9f6a4408a5911c746ef0d50389ef44d14..40d4281b1a96e1770c08fd7fe22f7cf0f8e95518 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 21347e4ac4fd8a1785216d8618bf58ed5b07b6b5..a7a09f67a91af885dd725314bd4dc25757d8b60f 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 0000000000000000000000000000000000000000..b5b5c162ca4cafd4141834f87b08696cb0ffc278
--- /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>
+    );
+}