'use client'; import { useEffect, useState } from 'react'; import { useSearchParams, useRouter } from 'next/navigation'; import { useAuthStore, type LinuxDoUser } from '@/lib/store/auth-store'; import { useHistoryStore } from '@/lib/store/history-store'; import { useSearchHistoryStore } from '@/lib/store/search-history-store'; export function AccountSettings() { const [isHydrated, setIsHydrated] = useState(false); const searchParams = useSearchParams(); const router = useRouter(); const { user, isAuthenticated, login, logout } = useAuthStore(); const { clearHistory } = useHistoryStore(); const { clearSearchHistory } = useSearchHistoryStore(); // Wait for Zustand to hydrate from localStorage useEffect(() => { setIsHydrated(true); }, []); useEffect(() => { const authSuccess = searchParams.get('auth_success'); const token = searchParams.get('token'); const userStr = searchParams.get('user'); console.log('[AccountSettings] Checking URL params:', { authSuccess, hasToken: !!token, hasUser: !!userStr, }); if (authSuccess && token && userStr) { try { const userData = JSON.parse(userStr) as LinuxDoUser; console.log('[AccountSettings] Parsed user data:', { id: userData.id, username: userData.username, }); clearHistory(); clearSearchHistory(); login(userData, token); console.log('[AccountSettings] Login complete, redirecting...'); router.replace('/settings'); } catch (e) { console.error('[AccountSettings] Failed to parse user data:', e); } } }, [searchParams, login, clearHistory, clearSearchHistory, router]); const handleLogin = () => { clearHistory(); clearSearchHistory(); router.push('/api/oauth/authorize'); }; const handleLogout = () => { logout(); clearHistory(); clearSearchHistory(); }; // Don't render until hydrated to prevent flash if (!isHydrated) { return ( 账号 加载中... ); } return ( 账号 {!isAuthenticated ? ( 登录 Linux DO 以同步您的账号信息 使用 Linux DO 登录 ) : ( {user?.name || user?.username} @{user?.username} Trust Level {user?.trust_level} {user?.active && ( Active )} 退出登录 )} ); }
登录 Linux DO 以同步您的账号信息
@{user?.username}