UNPKG

symref

Version:

Static code checker for AI code agents (Windsurf, Cline, etc.)

80 lines 2.5 kB
import { useState, useEffect, useCallback } from 'react'; import { useLocalStorage } from './useLocalStorage'; /** * 認証状態を管理するカスタムフック */ export function useAuth() { // ユーザー情報の状態 const [user, setUser] = useState(null); // ローディング状態 const [isLoading, setIsLoading] = useState(true); // エラー状態 const [error, setError] = useState(null); // トークンをローカルストレージに保存 const [token, setToken, removeToken] = useLocalStorage('auth-token', null); // ユーザー情報を取得する関数 const fetchUserInfo = useCallback(async () => { if (!token) { setUser(null); setIsLoading(false); return; } try { setIsLoading(true); // 実際にはAPIリクエストを行う(この例ではモック) const mockUser = { id: '123', name: 'テストユーザー', email: 'test@example.com', role: 'user' }; setUser(mockUser); setError(null); } catch (err) { setError('ユーザー情報の取得に失敗しました'); setUser(null); } finally { setIsLoading(false); } }, [token]); // トークンが変更されたらユーザー情報を再取得 useEffect(() => { fetchUserInfo(); }, [fetchUserInfo]); // ログイン処理 const login = useCallback(async (credentials) => { try { setIsLoading(true); // 実際にはAPIリクエストを行う(この例ではモック) await new Promise(resolve => setTimeout(resolve, 500)); // ログイン成功を模擬 const mockToken = `token_${Date.now()}`; setToken(mockToken); return true; } catch (err) { setError('ログインに失敗しました'); return false; } finally { setIsLoading(false); } }, [setToken]); // ログアウト処理 const logout = useCallback(() => { removeToken(); setUser(null); setError(null); }, [removeToken]); return { user, isLoading, isAuthenticated: !!user, error, login, logout }; } //# sourceMappingURL=useAuth.js.map