[chore/frontend] call /auth/logout during logout

This commit is contained in:
CDN 2025-02-22 01:23:13 +08:00
parent 2c3e238e9a
commit 3d19ef05b3
Signed by: CDN
GPG key ID: 0C656827F9F80080
2 changed files with 48 additions and 8 deletions

View file

@ -61,17 +61,52 @@ const AdminLayout: FC<AdminLayoutProps> = () => {
const location = useLocation();
const navigate = useNavigate();
const { theme, setTheme } = useTheme();
const { user, loading, error } = useUser();
const { user, loading, error, fetchUser } = useUser();
useEffect(() => {
console.log('AdminLayout user:', user);
console.log('AdminLayout loading:', loading);
console.log('AdminLayout error:', error);
}, [user, loading, error]);
// 如果没有 token重定向到登录页
if (!localStorage.getItem('token')) {
navigate('/admin/login');
return;
}
const handleLogout = () => {
localStorage.removeItem('token');
navigate('/admin/login');
// 如果没有用户信息且没有在加载中,尝试获取用户信息
if (!user && !loading && !error) {
fetchUser();
}
// 如果获取用户信息出错,可能是 token 过期,重定向到登录页
if (error) {
localStorage.removeItem('token');
navigate('/admin/login');
}
}, [user, loading, error, navigate, fetchUser]);
const handleLogout = async () => {
try {
// 调用后端登出接口
const token = localStorage.getItem('token');
if (token) {
await fetch('/api/v1/auth/logout', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
},
});
}
} catch (err) {
console.error('Logout error:', err);
} finally {
// 清除所有认证相关的存储数据
localStorage.removeItem('token');
localStorage.removeItem('username');
// 重置用户状态
await fetchUser();
// 重定向到登录页
navigate('/admin/login');
}
};
return (