Admin User nach einer Zeit von einer Stunde löschen (Cookie oder Local Storrage) , automatisch abmelden
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
"use client"; // components/Header.jsx
|
||||
import React, { useState, useEffect } from "react";
|
||||
import React, { useState, useEffect, useRef, useCallback } from "react";
|
||||
import { Icon } from "@iconify/react";
|
||||
import Image from "next/image";
|
||||
import { useRouter } from "next/router";
|
||||
@@ -15,16 +15,18 @@ function Header() {
|
||||
const router = useRouter();
|
||||
const [showSettingsModal, setShowSettingsModal] = useState(false);
|
||||
const [isAdminLoggedIn, setIsAdminLoggedIn] = useState(false);
|
||||
const autoLogoutTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
||||
// Removed duplicate declaration of deviceName
|
||||
|
||||
const handleCloseSettingsModal = () => setShowSettingsModal(false);
|
||||
|
||||
const handleLogout = () => {
|
||||
const handleLogout = useCallback(() => {
|
||||
sessionStorage.removeItem("token"); // Token entfernen
|
||||
localStorage.setItem("isAdminLoggedIn", "false"); // Admin-Status entfernen
|
||||
localStorage.removeItem("adminLoginTime"); // Login-Zeitpunkt entfernen
|
||||
setIsAdminLoggedIn(false); // Zustand sofort aktualisieren
|
||||
router.push("/offline.html"); // Weiterleitung
|
||||
};
|
||||
}, [router]);
|
||||
|
||||
useEffect(() => {
|
||||
// Initialer Check beim Laden der Komponente
|
||||
@@ -43,6 +45,56 @@ function Header() {
|
||||
clearInterval(interval); // Intervall stoppen, wenn die Komponente entladen wird
|
||||
};
|
||||
}, [isAdminLoggedIn]);
|
||||
|
||||
// Auto-Logout nach 1 Minute (Test): nutzt adminLoginTime aus localStorage
|
||||
useEffect(() => {
|
||||
// Timer bereinigen, wenn sich der Status ändert
|
||||
if (autoLogoutTimerRef.current) {
|
||||
clearTimeout(autoLogoutTimerRef.current);
|
||||
autoLogoutTimerRef.current = null;
|
||||
}
|
||||
|
||||
if (!isAdminLoggedIn) return;
|
||||
|
||||
const iso = localStorage.getItem("adminLoginTime");
|
||||
const loginTime = iso ? new Date(iso).getTime() : Date.now();
|
||||
if (!iso) {
|
||||
// Falls älterer Login ohne Zeitstempel, setze jetzt
|
||||
try {
|
||||
localStorage.setItem(
|
||||
"adminLoginTime",
|
||||
new Date(loginTime).toISOString()
|
||||
);
|
||||
} catch {
|
||||
void 0; // ignore write errors (e.g., storage disabled)
|
||||
}
|
||||
}
|
||||
|
||||
// 1 Minute ab Login (60_000 ms), eine Stunde (3_600_000 ms) im Produktivbetrieb
|
||||
const target = loginTime + 3_600_000;
|
||||
const delay = Math.max(0, target - Date.now());
|
||||
|
||||
// Fallback: wenn Datum in Vergangenheit (z.B. Uhrzeit geändert), sofort abmelden
|
||||
autoLogoutTimerRef.current = setTimeout(() => {
|
||||
// Versuche den Button zu klicken, falls vorhanden
|
||||
const btn = document.querySelector<HTMLButtonElement>(
|
||||
'button[aria-label="Abmelden"]'
|
||||
);
|
||||
if (btn) {
|
||||
btn.click();
|
||||
} else {
|
||||
// Fallback direkt
|
||||
handleLogout();
|
||||
}
|
||||
}, delay);
|
||||
|
||||
return () => {
|
||||
if (autoLogoutTimerRef.current) {
|
||||
clearTimeout(autoLogoutTimerRef.current);
|
||||
autoLogoutTimerRef.current = null;
|
||||
}
|
||||
};
|
||||
}, [isAdminLoggedIn, handleLogout]);
|
||||
//----------------------------------------------------------------
|
||||
const dispatch = useDispatch<AppDispatch>();
|
||||
|
||||
@@ -139,6 +191,7 @@ function Header() {
|
||||
<div className="flex items-center justify-end w-1/4 space-x-1">
|
||||
<button
|
||||
onClick={handleLogout}
|
||||
aria-label="Abmelden"
|
||||
className="bg-littwin-blue text-white px-4 py-2 rounded"
|
||||
>
|
||||
Abmelden
|
||||
|
||||
Reference in New Issue
Block a user