39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
'use client'
|
|
|
|
import { useEffect } from 'react'
|
|
import { useSearchParams, useRouter } from 'next/navigation'
|
|
|
|
/**
|
|
* Auth Code Handler
|
|
*
|
|
* Handles auth codes that Supabase redirects to the home page
|
|
* Redirects to /auth/callback to process the code exchange
|
|
*/
|
|
export function AuthCodeHandler() {
|
|
const searchParams = useSearchParams()
|
|
const router = useRouter()
|
|
const code = searchParams.get('code')
|
|
const type = searchParams.get('type')
|
|
|
|
useEffect(() => {
|
|
if (code) {
|
|
// Build callback URL with all parameters
|
|
const callbackUrl = new URL('/auth/callback', window.location.origin)
|
|
callbackUrl.searchParams.set('code', code)
|
|
if (type) {
|
|
callbackUrl.searchParams.set('type', type)
|
|
}
|
|
// If it's a recovery flow, ensure we redirect to update-password
|
|
if (type === 'recovery') {
|
|
callbackUrl.searchParams.set('next', '/update-password')
|
|
}
|
|
|
|
// Redirect to callback route
|
|
router.replace(callbackUrl.pathname + callbackUrl.search)
|
|
}
|
|
}, [code, type, router])
|
|
|
|
return null
|
|
}
|
|
|