Auth session 持久化 + 多分辨率跑道图表 + 拖拽缩放

- middleware: refreshMiddlewareSession 前置刷新 Supabase token
- backend-auth: getUser() 优先触发 refresh,再 getSession 拿新 token
- Dashboard: onAuthStateChange 实时更新 proAccess + 15min getSession 心跳
- detail proxy: 新增 city/[name]/detail 代理,透传 resolution 参数
- city_payloads: aggregate_runway_history + build_runway_band_history 跑道聚合
- chart: 10m→1m 自适应分辨率 + zoom 拖拽 + 跑道温区 Area + Runway Details 开关
This commit is contained in:
2569718930@qq.com
2026-05-26 20:37:00 +08:00
parent 88b80d66e8
commit d029d5c4e7
11 changed files with 604 additions and 91 deletions
+44 -1
View File
@@ -1,5 +1,5 @@
import { createServerClient, type CookieOptions } from "@supabase/ssr";
import type { NextRequest, NextResponse } from "next/server";
import { NextRequest, NextResponse } from "next/server";
type CookieAdapter = {
getAll: () => { name: string; value: string }[];
@@ -68,3 +68,46 @@ export function createSupabaseRouteClient(
});
}
export async function refreshMiddlewareSession(request: NextRequest) {
let response = NextResponse.next({
request: {
headers: request.headers,
},
});
if (!hasSupabaseServerEnv()) {
return { response, user: null };
}
const supabase = createSupabaseServerClient({
getAll() {
return request.cookies.getAll().map((item) => ({
name: item.name,
value: item.value,
}));
},
setAll(cookiesToSet) {
for (const cookie of cookiesToSet) {
request.cookies.set(cookie.name, cookie.value);
}
response = NextResponse.next({
request: {
headers: request.headers,
},
});
for (const cookie of cookiesToSet) {
response.cookies.set(cookie.name, cookie.value, cookie.options);
}
},
});
try {
const {
data: { user },
} = await supabase.auth.getUser();
return { response, user };
} catch {
return { response, user: null };
}
}