From 69e01bdc32dd64e0f5caae6b4829c5fbcf5d3a12 Mon Sep 17 00:00:00 2001 From: seaHi Date: Sun, 26 Jul 2026 17:52:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9A=84=E5=9F=BA=E7=A1=80=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E5=92=8C=E8=AE=A4=E8=AF=81=E9=92=A9=E5=AD=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.d.ts | 6 +- src/hooks.server.ts | 24 ++++++++ src/routes/admin/+layout.server.ts | 7 +++ src/routes/admin/+layout.svelte | 89 ++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 src/hooks.server.ts create mode 100644 src/routes/admin/+layout.server.ts create mode 100644 src/routes/admin/+layout.svelte diff --git a/src/app.d.ts b/src/app.d.ts index a808988..79a056a 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -12,7 +12,11 @@ declare global { } // interface Error {} - // interface Locals {} + interface Locals { + user?: { + email: string; + } + } // interface PageData {} // interface PageState {} } diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..d9cfcc7 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,24 @@ +import type { Handle } from '@sveltejs/kit'; +import { dev } from '$app/environment'; + +export const handle: Handle = async ({ event, resolve }) => { + // 拦截 /admin 路由 + if (event.url.pathname.startsWith('/admin')) { + // 读取 Cloudflare Access 提供的 Header + const userEmail = event.request.headers.get('cf-access-authenticated-user-email'); + + // 本地开发环境通过 $app/environment 的 dev 变量来判断 + const isLocalDev = dev; + + if (!userEmail && !isLocalDev) { + return new Response('Unauthorized', { status: 401 }); + } + + // 将用户信息存入 locals,供后续使用 + event.locals.user = { + email: userEmail || 'dev@local.host' + }; + } + + return resolve(event); +}; diff --git a/src/routes/admin/+layout.server.ts b/src/routes/admin/+layout.server.ts new file mode 100644 index 0000000..ec238fd --- /dev/null +++ b/src/routes/admin/+layout.server.ts @@ -0,0 +1,7 @@ +import type { LayoutServerLoad } from './$types'; + +export const load: LayoutServerLoad = async ({ locals }) => { + return { + user: locals.user + }; +}; diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte new file mode 100644 index 0000000..13e7abc --- /dev/null +++ b/src/routes/admin/+layout.svelte @@ -0,0 +1,89 @@ + + + + 后台管理 - BlogFlare + + +
+
+ BlogFlare Admin + + +
+
+ +
+
+ {@render children()} +
+
+ +