'use client'; import { useEffect, useState } from 'react'; import { apiUrl } from '@/lib/constants'; import { getAdminToken, setAdminToken } from '@/lib/adminAuth'; interface AdminAccessGateProps { children: React.ReactNode; } export default function AdminAccessGate({ children }: AdminAccessGateProps) { const [tokenInput, setTokenInput] = useState(''); const [verified, setVerified] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); useEffect(() => { const saved = getAdminToken(); if (saved) { setTokenInput(saved); verifyToken(saved); } }, []); const verifyToken = async (tokenToVerify: string) => { if (!tokenToVerify) { setError('请输入 admin token'); return; } setLoading(true); setError(''); try { const response = await fetch(`${apiUrl}/auth/verify?token=${encodeURIComponent(tokenToVerify)}`, { headers: { 'x-admin-token': tokenToVerify }, }); if (!response.ok) { setVerified(false); setError('Token 验证失败,请重试'); return; } setAdminToken(tokenToVerify); setVerified(true); setError(''); } catch (err) { console.error('Error verifying token', err); setError('无法验证 token,请稍后再试'); } finally { setLoading(false); } }; if (verified) { return <>{children}; } return (

Private Space Access

Enter Admin Token

这个站点是私有的,访问前需要输入管理员 token。

setTokenInput(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { verifyToken(tokenInput); } }} disabled={loading} /> {error &&

{error}

}

如需重置或更换 token,请刷新页面重新输入。

); }