Redirecting to localhost 3000 on prod
Unanswered
evandabest posted this in #help-forum
I recently deployed my NextJs project to Vercel and I am facing this problem on the production website. When I login with google, it redirects to localhost 3000.
I'll paste some of the google oauth functions and stuff. I am using supabase btw
Action.ts from login page
I'll paste some of the google oauth functions and stuff. I am using supabase btw
Action.ts from login page
'use server'
import { revalidatePath } from 'next/cache'
import { redirect } from 'next/navigation'
import { createClient } from '@/utils/supabase/server'
import { getURL } from '@/utils/helpers'
export async function login(formData: FormData) {
const supabase = createClient()
// type-casting here for convenience
// in practice, you should validate your inputs
const data = {
email: formData.get('email') as string,
password: formData.get('password') as string,
}
const { error } = await supabase.auth.signInWithPassword(data)
if (error) {
console.log(error)
redirect('/error')
}
revalidatePath('/', 'layout')
redirect('/home')
}
export async function signup(formData: FormData) {
const supabase = createClient()
// type-casting here for convenience
// in practice, you should validate your inputs
const data = {
email: formData.get('email') as string,
password: formData.get('password') as string,
}
const { error } = await supabase.auth.signUp(data)
if (error) {
console.log(error)
redirect('/error')
}
revalidatePath('/', 'layout')
redirect('/home')
}
export async function signInWithGoogle() {
const supabase = createClient()
const redirectUrl = '/auth/callback'
const { data,error } = await supabase.auth.signInWithOAuth({
provider: 'google',
options: {
redirectTo: redirectUrl,
}})
if (error) {
console.log(error)
redirect('/error')
}
redirect(data.url)
}2 Replies
route.ts in /callback
import { cookies } from 'next/headers'
import { NextResponse } from 'next/server'
import { type CookieOptions, createServerClient } from '@supabase/ssr'
import { redirect } from 'next/navigation'
export async function GET(request: Request) {
const requestURL = new URL(request.url)
const { searchParams, origin } = requestURL
const code = searchParams.get('code')
// if "next" is in param, use it as the redirect URL
const next = searchParams.get('next') ?? "/home"
console.log(next)
if (code) {
const cookieStore = cookies()
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
get(name: string) {
return cookieStore.get(name)?.value
},
set(name: string, value: string, options: CookieOptions) {
cookieStore.set({ name, value, ...options })
},
remove(name: string, options: CookieOptions) {
cookieStore.delete({ name, ...options })
},
},
}
)
const { error } = await supabase.auth.exchangeCodeForSession(code)
if (!error) {
return NextResponse.redirect(requestURL.origin + "/home")
//return redirect(requestURL.origin+"/home")
}
}
// return the user to an error page with instructions
return NextResponse.redirect(`${origin}/login`)
}route.ts in /confirm
import { type EmailOtpType } from '@supabase/supabase-js'
import { type NextRequest, NextResponse } from 'next/server'
import { createClient } from '@/utils/supabase/server'
export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url)
const token_hash = searchParams.get('token_hash')
const type = searchParams.get('type') as EmailOtpType | null
const next = searchParams.get('next') ?? '/'
const redirectTo = request.nextUrl.clone()
redirectTo.pathname = next
redirectTo.searchParams.delete('token_hash')
redirectTo.searchParams.delete('type')
if (token_hash && type) {
const supabase = createClient()
const { error } = await supabase.auth.verifyOtp({
type,
token_hash,
})
if (!error) {
redirectTo.searchParams.delete('next')
return NextResponse.redirect(redirectTo)
}
}
// return the user to an error page with some instructions
redirectTo.pathname = '/error'
return NextResponse.redirect(redirectTo)
}