47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { createServerClient, type CookieOptions } from "@supabase/ssr"
|
||
import { NextResponse, type NextRequest } from "next/server"
|
||
|
||
// ✅ 用 headers 构造 host,不再使用 getRuntimeEnv
|
||
function getSupabaseUrlFromRequest(req: NextRequest, port = "8000"): string {
|
||
const proto =
|
||
req.headers.get("x-forwarded-proto") ??
|
||
(req.headers.get("host")?.includes(":443") ? "https" : "http")
|
||
|
||
const rawHost = req.headers.get("x-forwarded-host") ?? req.headers.get("host")!
|
||
const hostname = rawHost.split(",")[0].split(":")[0].trim()
|
||
return `${proto}://${hostname}:${port}`
|
||
}
|
||
|
||
export const createClient = (request: NextRequest) => {
|
||
// Create an unmodified response
|
||
let response = NextResponse.next({
|
||
request: {
|
||
headers: request.headers
|
||
}
|
||
})
|
||
|
||
const supabase = createServerClient(
|
||
getSupabaseUrlFromRequest(request), // ✅ 这里改了,其他全保留
|
||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||
{
|
||
cookies: {
|
||
get(name: string) {
|
||
return request.cookies.get(name)?.value
|
||
},
|
||
set(name: string, value: string, options: CookieOptions) {
|
||
request.cookies.set({ name, value, ...options })
|
||
response = NextResponse.next({ request: { headers: request.headers } })
|
||
response.cookies.set({ name, value, ...options })
|
||
},
|
||
remove(name: string, options: CookieOptions) {
|
||
request.cookies.set({ name, value: "", ...options })
|
||
response = NextResponse.next({ request: { headers: request.headers } })
|
||
response.cookies.set({ name, value: "", ...options })
|
||
}
|
||
}
|
||
}
|
||
)
|
||
|
||
return { supabase, response }
|
||
}
|