Spaces:
Sleeping
Sleeping
| /** | |
| * useAutoLogout.js | |
| * | |
| * This custom React hook automatically logs out a user after a period of inactivity. | |
| * - Tracks user activity (mouse movement, clicks, key presses, scrolling). | |
| * - Resets the inactivity timer on any interaction. | |
| * - Calls the provided handleLogout function if the user is inactive for the specified timeout. | |
| * - Also logs out the user when the window is closed or refreshed. | |
| */ | |
| import { useEffect } from "react"; | |
| export default function useAutoLogout(sessionId, handleLogout, timeout) { | |
| useEffect(() => { | |
| if (!sessionId) return; | |
| let timer; | |
| const resetTimer = () => { | |
| clearTimeout(timer); | |
| timer = setTimeout(() => { | |
| console.log("Auto logout: inactive for 5 mins"); | |
| handleLogout(); | |
| }, timeout); | |
| }; | |
| window.addEventListener("mousemove", resetTimer); | |
| window.addEventListener("keydown", resetTimer); | |
| window.addEventListener("click", resetTimer); | |
| window.addEventListener("scroll", resetTimer); | |
| const handleUnload = () => handleLogout(); | |
| window.addEventListener("beforeunload", handleUnload); | |
| resetTimer(); | |
| return () => { | |
| clearTimeout(timer); | |
| window.removeEventListener("mousemove", resetTimer); | |
| window.removeEventListener("keydown", resetTimer); | |
| window.removeEventListener("click", resetTimer); | |
| window.removeEventListener("scroll", resetTimer); | |
| window.removeEventListener("beforeunload", handleUnload); | |
| }; | |
| }, [sessionId, handleLogout, timeout]); | |
| } | |