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:
@@ -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" });
|
||||
|
||||
Reference in New Issue
Block a user