From 885cb19e9c51306e40e139e3b015b8784c696636 Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 14 Nov 2024 14:29:47 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Redux=20zur=20Verwaltung=20des=20Admin-?= =?UTF-8?q?Status=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neuen Redux-Slice 'authSlice' erstellt, um den Admin-Login-Status zu verwalten. - Token-Verwaltung im SettingsModal angepasst, um Redux-Status zu aktualisieren. - Admin-Warnhinweis im Header zeigt jetzt den Redux-Status an und aktualisiert sich automatisch. - Abmeldefunktion verbessert, um Token aus dem Redux-Store zu entfernen und Seite zu aktualisieren. --- components/Header.jsx | 36 ++++++++++++++++--- .../modales/settingsModal/SettingsModal.jsx | 5 +++ store/authSlice.js | 17 +++++++++ store/store.js | 2 ++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 store/authSlice.js diff --git a/components/Header.jsx b/components/Header.jsx index d122eef..46f5b16 100644 --- a/components/Header.jsx +++ b/components/Header.jsx @@ -1,6 +1,5 @@ -// components/Header.jsx -"use client"; -import React, { useState } from "react"; +"use client"; // components/Header.jsx +import React, { useState, useEffect } from "react"; import Image from "next/image"; import { useRouter } from "next/router"; import "bootstrap-icons/font/bootstrap-icons.css"; @@ -8,13 +7,33 @@ import SettingsModal from "./modales/settingsModal/SettingsModal"; import { useSelector } from "react-redux"; function Header() { + const isAdminLoggedIn = useSelector((state) => state.auth.isAdminLoggedIn); const router = useRouter(); const deviceName = useSelector((state) => state.variables.deviceName); const [showSettingsModal, setShowSettingsModal] = useState(false); + //const [isAdminLoggedIn, setIsAdminLoggedIn] = useState(false); const handleSettingsClick = () => setShowSettingsModal(true); const handleCloseSettingsModal = () => setShowSettingsModal(false); - const handleLogout = () => (window.location.href = "/offline.html"); + const handleLogout = () => { + localStorage.removeItem("token"); // Token entfernen beim Abmelden + //setIsAdminLoggedIn(false); + window.location.href = "/offline.html"; + }; + + // Funktion, um den Token-Status zu prüfen + useEffect(() => { + const token = localStorage.getItem("token"); + if (token) { + const { exp } = JSON.parse(atob(token)); + if (Date.now() < exp) { + //setIsAdminLoggedIn(true); + } else { + localStorage.removeItem("token"); // Entferne abgelaufenen Token + //setIsAdminLoggedIn(false); + } + } + }, []); return (
@@ -36,6 +55,7 @@ function Header() {

{deviceName}

+
+ + {/* Warnhinweis, wenn der Admin angemeldet ist */} + {isAdminLoggedIn && ( +
+ Admin-Modus aktiv +
+ )} + {showSettingsModal && ( { + state.isAdminLoggedIn = action.payload; + }, + }, +}); + +export const { setAdminLoggedIn } = authSlice.actions; +export default authSlice.reducer; diff --git a/store/store.js b/store/store.js index 8157175..1868adb 100644 --- a/store/store.js +++ b/store/store.js @@ -1,10 +1,12 @@ // store/store.js import { configureStore } from "@reduxjs/toolkit"; import variablesReducer from "./variablesSlice"; +import authReducer from "./authSlice"; const store = configureStore({ reducer: { variables: variablesReducer, + auth: authReducer, }, //devTools: process.env.NODE_ENV !== "production", // Aktiviert DevTools nur in der Entwicklung });