From a0fd937b7975428059dcf217362d71a181c962d9 Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 20 May 2025 17:24:48 +0800 Subject: [PATCH] . --- chatdesk-ui/app/[locale]/layout.tsx | 1 + chatdesk-ui/app/[locale]/login/page.tsx | 25 ++++++----- chatdesk-ui/lib/supabase/browser-client.ts | 48 +++++++++++++++++++++- chatdesk-ui/lib/supabase/client.ts | 19 +++++---- 4 files changed, 74 insertions(+), 19 deletions(-) diff --git a/chatdesk-ui/app/[locale]/layout.tsx b/chatdesk-ui/app/[locale]/layout.tsx index da759a2..0e44094 100644 --- a/chatdesk-ui/app/[locale]/layout.tsx +++ b/chatdesk-ui/app/[locale]/layout.tsx @@ -13,6 +13,7 @@ import "./globals.css" import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 import Script from "next/script" + const inter = Inter({ subsets: ["latin"] }) const APP_NAME = "ChatDesk UI" const APP_DEFAULT_TITLE = "ChatDesk UI" diff --git a/chatdesk-ui/app/[locale]/login/page.tsx b/chatdesk-ui/app/[locale]/login/page.tsx index 53cd12b..ef8a540 100644 --- a/chatdesk-ui/app/[locale]/login/page.tsx +++ b/chatdesk-ui/app/[locale]/login/page.tsx @@ -10,6 +10,7 @@ import { Metadata } from "next" import { cookies, headers } from "next/headers" import { redirect } from "next/navigation" import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 +import { initSupabase } from "@/lib/supabase/init" import initTranslations from "@/lib/i18n"; @@ -30,17 +31,19 @@ export default async function Login({ const localeString = locale; const { t, resources } = await initTranslations(localeString, ['translation']); - const supabase = createServerClient( - getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, - { - cookies: { - get(name: string) { - return cookieStore.get(name)?.value - } - } - } - ) + // const supabase = createServerClient( + // getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", + // process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + // { + // cookies: { + // get(name: string) { + // return cookieStore.get(name)?.value + // } + // } + // } + // ) + const supabase = await initSupabase() + const session = (await supabase.auth.getSession()).data.session console.log("[login page]Login session:", session) diff --git a/chatdesk-ui/lib/supabase/browser-client.ts b/chatdesk-ui/lib/supabase/browser-client.ts index 918d922..bc00c53 100644 --- a/chatdesk-ui/lib/supabase/browser-client.ts +++ b/chatdesk-ui/lib/supabase/browser-client.ts @@ -1,8 +1,54 @@ import { Database } from "@/supabase/types" -import { createBrowserClient } from "@supabase/ssr" import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 +import { createBrowserClient, createServerClient } from "@supabase/ssr" +import { cookies as serverCookies } from "next/headers" + export const supabase = createBrowserClient( getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! ) + + +let _supabase: ReturnType | null = null + +export async function initSupabase(providedCookieStore?: ReturnType) { + if (typeof window === "undefined") { + // SSR 路径:用服务端 Supabase 客户端 + const cookieStore = providedCookieStore ?? serverCookies() + return createServerClient( + getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { + cookies: { + get(name: string) { + return cookieStore.get(name)?.value + } + } + } + ) + } + + // CSR 路径:等待 RUNTIME_ENV 注入,并复用客户端实例 + if (_supabase) return _supabase + + await waitForRuntimeEnv() + + const url = window.RUNTIME_ENV?.SUPABASE_URL + const key = window.RUNTIME_ENV?.SUPABASE_ANON_KEY + + if (!url || !key) { + throw new Error("Missing SUPABASE_URL or SUPABASE_ANON_KEY in RUNTIME_ENV") + } + + _supabase = createBrowserClient(url, key) + return _supabase +} + +async function waitForRuntimeEnv(retry = 50, interval = 50) { + for (let i = 0; i < retry; i++) { + if (window.RUNTIME_ENV?.SUPABASE_URL && window.RUNTIME_ENV?.SUPABASE_ANON_KEY) return + await new Promise((r) => setTimeout(r, interval)) + } + throw new Error("window.RUNTIME_ENV not ready after wait") +} \ No newline at end of file diff --git a/chatdesk-ui/lib/supabase/client.ts b/chatdesk-ui/lib/supabase/client.ts index e5ddb26..8efb87d 100644 --- a/chatdesk-ui/lib/supabase/client.ts +++ b/chatdesk-ui/lib/supabase/client.ts @@ -1,8 +1,13 @@ -import { createBrowserClient } from "@supabase/ssr" -import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 +// import { createBrowserClient } from "@supabase/ssr" +// import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 -export const createClient = () => - createBrowserClient( - getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! - ) +// export const createClient = () => +// createBrowserClient( +// getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", +// process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! +// ) + + +import { initSupabase } from "@/lib/supabase/init" + +export const createClient = initSupabase \ No newline at end of file