import { useState } from 'react' import { useAuth } from '../lib/useSession' import { supabase } from '../lib/supabase' export default function AuthDebug() { const { session, user, loading, error, signOut, refreshSession } = useAuth() const [testResults, setTestResults] = useState(null) const [isTestingAuth, setIsTestingAuth] = useState(false) // JWT API request state const [apiUrl, setApiUrl] = useState(`${window.location.origin}/api/v1/admin/settings`) const [apiMethod, setApiMethod] = useState<'GET' | 'POST' | 'PUT' | 'DELETE'>('GET') const [apiRequestBody, setApiRequestBody] = useState('') const [apiResponse, setApiResponse] = useState(null) const [isTestingApi, setIsTestingApi] = useState(false) const runAuthTests = async () => { setIsTestingAuth(true) setTestResults(null) const results: any = { timestamp: new Date().toISOString(), tests: {} } try { // Test 1: Get current session console.log('[Auth Debug] Testing current session...') const { data: sessionData, error: sessionError } = await supabase.auth.getSession() results.tests.currentSession = { success: !sessionError, hasSession: !!sessionData.session, error: sessionError?.message, userId: sessionData.session?.user?.id, email: sessionData.session?.user?.email } // Test 2: Get current user console.log('[Auth Debug] Testing current user...') const { data: userData, error: userError } = await supabase.auth.getUser() results.tests.currentUser = { success: !userError, hasUser: !!userData.user, error: userError?.message, userId: userData.user?.id, email: userData.user?.email } // Test 3: Environment variables results.tests.environment = { supabaseUrl: import.meta.env.VITE_SUPABASE_URL || 'MISSING', supabaseKey: import.meta.env.VITE_SUPABASE_PUBLISHABLE_DEFAULT_KEY ? 'CONFIGURED' : 'MISSING', mode: import.meta.env.MODE, dev: import.meta.env.DEV } // Test 4: Local storage results.tests.localStorage = { hasSupabaseSession: !!localStorage.getItem('sb-nrlkjfznsavsbmweiyqu-auth-token'), keys: Object.keys(localStorage).filter(key => key.includes('supabase') || key.includes('sb-')) } // Test 5: Context state results.tests.contextState = { hasSession: !!session, hasUser: !!user, loading, hasError: !!error, errorMessage: error?.message } } catch (err) { results.tests.unexpectedError = { message: err instanceof Error ? err.message : 'Unknown error', error: err } } console.log('[Auth Debug] Test results:', results) setTestResults(results) setIsTestingAuth(false) } const clearLocalStorage = () => { const keys = Object.keys(localStorage).filter(key => key.includes('supabase') || key.includes('sb-') ) keys.forEach(key => localStorage.removeItem(key)) console.log('[Auth Debug] Cleared local storage keys:', keys) alert(`Cleared ${keys.length} auth-related localStorage keys`) } const testSignIn = async (provider: 'github' | 'google' | 'facebook' = 'github') => { try { // Supabase redirects back to your app after OAuth const redirectTo = `${window.location.origin}/auth/callback` const { error } = await supabase.auth.signInWithOAuth({ provider, options: { redirectTo, queryParams: provider === 'facebook' ? { scope: 'email' } : { access_type: 'offline', prompt: 'consent', } } }) if (error) { alert(`${provider} sign in test failed: ${error.message}`) } } catch (err) { alert(`${provider} sign in test error: ${err instanceof Error ? err.message : 'Unknown error'}`) } } const testApiRequest = async () => { if (!session?.access_token) { setApiResponse({ error: 'No JWT token available. Please sign in first.', timestamp: new Date().toISOString() }) return } setIsTestingApi(true) setApiResponse(null) const requestData = { url: apiUrl, method: apiMethod, timestamp: new Date().toISOString(), jwt: session.access_token.substring(0, 20) + '...' // Show partial token for debug } try { console.log('[API Debug] Making request with JWT:', requestData) const requestOptions: RequestInit = { method: apiMethod, headers: { 'Authorization': `Bearer ${session.access_token}`, 'Content-Type': 'application/json', } } // Add request body for POST/PUT requests if ((apiMethod === 'POST' || apiMethod === 'PUT') && apiRequestBody.trim()) { try { JSON.parse(apiRequestBody) // Validate JSON requestOptions.body = apiRequestBody } catch (e) { setApiResponse({ error: 'Invalid JSON in request body', timestamp: new Date().toISOString(), requestData }) return } } const response = await fetch(apiUrl, requestOptions) let responseData: any const contentType = response.headers.get('content-type') if (contentType && contentType.includes('application/json')) { responseData = await response.json() } else { responseData = await response.text() } const result = { success: response.ok, status: response.status, statusText: response.statusText, headers: Object.fromEntries(response.headers.entries()), data: responseData, requestData, timestamp: new Date().toISOString() } console.log('[API Debug] Response:', result) setApiResponse(result) } catch (err) { const errorResult = { error: err instanceof Error ? err.message : 'Unknown error', requestData, timestamp: new Date().toISOString() } console.error('[API Debug] Request failed:', errorResult) setApiResponse(errorResult) } finally { setIsTestingApi(false) } } return (
{/* Header */}

Authentication Debug Panel

Debug and test authentication functionality

{/* Current Auth State */}

Current Authentication State

Loading
{loading ? 'Yes' : 'No'}
Has Session
{session ? 'Yes' : 'No'}
User ID
{user?.id || 'None'}
Email
{user?.email || 'None'}
{error && (
Authentication Error
{error.message}
)} {/* Prominent JWT Token Display */} {session && (

🔑 JWT Access Token