navbarban jol le vannak kezelve a redirect es letre lett hozva egy hook amivel automatikusan berakja a usernamet es ha meg nem akkor redirectel
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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]
|
||||
}
|
||||
Reference in New Issue
Block a user