From 5d5acc80f78e94cd268678610cc6d257a11df03f Mon Sep 17 00:00:00 2001 From: Frontend Developer Date: Tue, 10 Mar 2026 09:18:56 +0000 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF:=20=E6=B7=BB=E5=8A=A0useAuth?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E9=92=A9=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/renderer/hooks/useAuth.js | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 frontend/src/renderer/hooks/useAuth.js diff --git a/frontend/src/renderer/hooks/useAuth.js b/frontend/src/renderer/hooks/useAuth.js new file mode 100644 index 0000000..b104cd2 --- /dev/null +++ b/frontend/src/renderer/hooks/useAuth.js @@ -0,0 +1,36 @@ +import { useState, useEffect } from 'react'; + +export const useAuth = () => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const token = localStorage.getItem('token'); + if (token) { + // Validate token and get user info + fetch('/api/auth/me', { + headers: { Authorization: `Bearer ${token}` } + }) + .then(res => res.json()) + .then(data => setUser(data.user)) + .catch(() => localStorage.removeItem('token')) + .finally(() => setLoading(false)); + } else { + setLoading(false); + } + }, []); + + const login = (token, userInfo) => { + localStorage.setItem('token', token); + setUser(userInfo); + }; + + const logout = () => { + localStorage.removeItem('token'); + setUser(null); + }; + + return { user, loading, login, logout }; +}; + +export default useAuth;