44 lines
1.2 KiB
React
44 lines
1.2 KiB
React
import { useState, useEffect } from "react"
|
|
import { useNavigate } from "react-router-dom"
|
|
|
|
export function requireAuthSync({ key = "username", redirectTo = "/login", replace = true } = {}) {
|
|
const value = localStorage.getItem(key)
|
|
if (!value) {
|
|
if (replace) window.location.replace(redirectTo)
|
|
else window.location.assign(redirectTo)
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Default hook: ad vissza egy [value, setValue] párt, szinkronizálja localStorage-t és átirányít, ha nincs érték
|
|
export default function useRequireAuth({ key = "username", redirectTo = "/login" } = {}) {
|
|
const navigate = useNavigate()
|
|
const [value, setValue] = useState(() => {
|
|
try {
|
|
return localStorage.getItem(key)
|
|
} catch {
|
|
return null
|
|
}
|
|
})
|
|
|
|
// Ha nincs érték, átirányítjuk (komponens mount-oláskor)
|
|
useEffect(() => {
|
|
if (!value) {
|
|
navigate(redirectTo)
|
|
}
|
|
}, [navigate, value, redirectTo])
|
|
|
|
// Szinkronizáljuk a localStorage-t amikor a state változik
|
|
useEffect(() => {
|
|
try {
|
|
if (value == null) localStorage.removeItem(key)
|
|
else localStorage.setItem(key, value)
|
|
} catch {
|
|
// fail silently
|
|
}
|
|
}, [key, value])
|
|
|
|
return [value, setValue]
|
|
}
|