Download src/integrations/supabase/auth-middleware.ts from incname/web: direct link, hf CLI and curl.
- Browser
- Download file 2.27 kB
-
https://huggingface.co/spaces/incname/web/resolve/main/src/integrations/supabase/auth-middleware.ts
- Command line
-
hf download hf://spaces/incname/web/src/integrations/supabase/auth-middleware.ts
-
curl -L -o auth-middleware.ts https://huggingface.co/spaces/incname/web/resolve/main/src/integrations/supabase/auth-middleware.ts
2.27 kB
| // This file is automatically generated. Do not edit it directly. | |
| import { createMiddleware } from '@tanstack/react-start' | |
| import { getRequest } from '@tanstack/react-start/server' | |
| import { createClient } from '@supabase/supabase-js' | |
| import type { Database } from './types' | |
| export const requireSupabaseAuth = createMiddleware({ type: 'function' }).server( | |
| async ({ next }) => { | |
| const SUPABASE_URL = process.env.SUPABASE_URL; | |
| const SUPABASE_PUBLISHABLE_KEY = process.env.SUPABASE_PUBLISHABLE_KEY; | |
| if (!SUPABASE_URL || !SUPABASE_PUBLISHABLE_KEY) { | |
| const missing = [ | |
| ...(!SUPABASE_URL ? ['SUPABASE_URL'] : []), | |
| ...(!SUPABASE_PUBLISHABLE_KEY ? ['SUPABASE_PUBLISHABLE_KEY'] : []), | |
| ]; | |
| const message = `Missing Supabase environment variable(s): ${missing.join(', ')}. Connect Supabase in Lovable Cloud.`; | |
| console.error(`[Supabase] ${message}`); | |
| throw new Error(message); | |
| } | |
| const request = getRequest(); | |
| if (!request?.headers) { | |
| throw new Error('Unauthorized: No request headers available'); | |
| } | |
| const authHeader = request.headers.get('authorization'); | |
| if (!authHeader) { | |
| throw new Error('Unauthorized: No authorization header provided'); | |
| } | |
| if (!authHeader.startsWith('Bearer ')) { | |
| throw new Error('Unauthorized: Only Bearer tokens are supported'); | |
| } | |
| const token = authHeader.replace('Bearer ', ''); | |
| if (!token) { | |
| throw new Error('Unauthorized: No token provided'); | |
| } | |
| const supabase = createClient<Database>( | |
| SUPABASE_URL!, | |
| SUPABASE_PUBLISHABLE_KEY!, | |
| { | |
| global: { | |
| headers: { | |
| Authorization: `Bearer ${token}`, | |
| }, | |
| }, | |
| auth: { | |
| storage: undefined, | |
| persistSession: false, | |
| autoRefreshToken: false, | |
| }, | |
| } | |
| ); | |
| const { data, error } = await supabase.auth.getClaims(token); | |
| if (error || !data?.claims) { | |
| throw new Error('Unauthorized: Invalid token'); | |
| } | |
| if (!data.claims.sub) { | |
| throw new Error('Unauthorized: No user ID found in token'); | |
| } | |
| return next({ | |
| context: { | |
| supabase, | |
| userId: data.claims.sub, | |
| claims: data.claims, | |
| }, | |
| }); | |
| }, | |
| ); | |