server-worklog/frontend/app/composables/useAuth.ts

46 lines
1 KiB
TypeScript

function decodeJwt(token: string) {
try {
const payload = token.split(".")[1]
const decoded = JSON.parse(atob(payload))
return decoded
} catch {
return null
}
}
export function useAuth() {
const token = useState<string | null>("token", () => null)
function setToken(t: string) {
token.value = t
if (typeof window !== "undefined") {
localStorage.setItem("token", t)
}
}
function loadToken() {
if (typeof window !== "undefined") {
const stored = localStorage.getItem("token")
if (!stored) return
const payload = decodeJwt(stored)
if( !payload || !payload.exp || payload.exp * 1000 < Date.now()) {
console.info("Token expired - removing it from storage")
localStorage.removeItem("token")
token.value = null
}
token.value = stored
}
}
function logout() {
token.value = null
if (typeof window !== "undefined") {
localStorage.removeItem("token")
}
}
return { token, setToken, loadToken, logout }
}