feat(frontend+backend): 实现SSR登录态优化与字体自托管

1. 后端调整refresh cookie路径与注释,完善认证cookie处理逻辑
2. 前端全局layout新增next/font自托管字体,消除FOUT闪动
3. 实现SSR直出登录态与未读通知数,避免页面加载闪动
4. 新增中间件处理access token静默轮转,保障SSR登录态
5. 优化登录、改密流程,添加页面刷新同步登录态
6. 重构通知铃铛组件支持初始未读数传入
This commit is contained in:
2026-09-12 04:59:26 +08:00
parent 1eaf3903d4
commit 1bb565c687
9 changed files with 226 additions and 30 deletions

View File

@@ -245,6 +245,27 @@ export async function fetchUserProfile(id: string, page = 1, cookieHeader?: stri
return res.json();
}
// SSR 端获取当前登录用户(layout 直出登录态,避免客户端水合后再切换)
export async function fetchMe(cookieHeader?: string): Promise<{ user: User | null }> {
const res = await fetch(`${API_BASE}/api/me`, {
cache: "no-store",
headers: cookieHeaders(cookieHeader),
});
if (!res.ok) return { user: null };
return res.json();
}
// SSR 端获取未读通知数(Header 铃铛红点直出)
export async function fetchUnreadCount(cookieHeader?: string): Promise<number> {
const res = await fetch(`${API_BASE}/api/notifications/unread-count`, {
cache: "no-store",
headers: cookieHeaders(cookieHeader),
});
if (!res.ok) return 0;
const data = await res.json();
return data.count || 0;
}
export async function fetchUserComments(id: string, page = 1): Promise<UserCommentsResponse> {
const params = new URLSearchParams({ page: String(page), size: "20" });
const res = await fetch(`${API_BASE}/api/users/${id}/comments?${params}`, { cache: "no-store" });