From 0e212d878c9f363453e1b9119f0d64fe78f86b83 Mon Sep 17 00:00:00 2001 From: "HanuCh@udhary" <137854084+hanuchaudhary@users.noreply.github.com> Date: Mon, 13 Jan 2025 21:29:08 +0530 Subject: [PATCH] middleware fix --- app/actions/action.ts | 51 +++++++++++++++++ app/api/auth/register/route.ts | 3 +- app/api/auth/user/route.ts | 9 +-- components/AuthComponent/SigninForm.tsx | 6 +- components/header.tsx | 20 ++----- middleware.ts | 28 ++++----- package-lock.json | 42 ++++++++------ package.json | 1 + store/AuthStore/useAuthStore.ts | 21 +++---- utils/supabase/client.ts | 8 +++ utils/supabase/middleware.ts | 76 +++++++++++++++++++++++++ utils/supabase/server.ts | 29 ++++++++++ 12 files changed, 230 insertions(+), 64 deletions(-) create mode 100644 app/actions/action.ts create mode 100644 utils/supabase/client.ts create mode 100644 utils/supabase/middleware.ts create mode 100644 utils/supabase/server.ts diff --git a/app/actions/action.ts b/app/actions/action.ts new file mode 100644 index 0000000..2d6b847 --- /dev/null +++ b/app/actions/action.ts @@ -0,0 +1,51 @@ +'use server' + +import { revalidatePath } from 'next/cache' +import { redirect } from 'next/navigation' +import { createClient } from '@/utils/supabase/server' +// import { signinSchema } from '@/validations/validation' + +// export async function login(data: { email: string, password: string }) { +// const supabase = await createClient() +// const { success, error } = signinSchema.safeParse(data); +// if (!success) { +// console.log(error); +// return; +// } +// // const data = { +// // email: formData.get('email') as string, +// // password: formData.get('password') as string, +// // } +// const { error: signInError } = await supabase.auth.signInWithPassword(data) +// if (signInError) { +// console.log(signInError); +// return +// } + +// revalidatePath('/', 'layout') +// redirect('/dashboard'); +// } + +// export async function signup(formData: FormData) { +// const supabase = await createClient() +// const data = { +// email: formData.get('email') as string, +// password: formData.get('password') as string, +// } + +// const { error } = await supabase.auth.signUp(data) + +// if (error) { +// redirect('/error') +// } + +// revalidatePath('/', 'layout') +// redirect('/') +// } + +export async function signout() { + const supabase = await createClient(); + await supabase.auth.signOut(); + revalidatePath('/', 'layout'); + redirect('/auth/signin'); +} \ No newline at end of file diff --git a/app/api/auth/register/route.ts b/app/api/auth/register/route.ts index b440cdb..27588b5 100644 --- a/app/api/auth/register/route.ts +++ b/app/api/auth/register/route.ts @@ -1,10 +1,11 @@ import prisma from "@/lib/database/prismaClient"; -import { supabase } from "@/lib/supabaseClient"; import { hashPassword } from "@/utils/hashing"; +import { createClient } from "@/utils/supabase/server"; import { signupSchema } from "@/validations/validation"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { + const supabase = await createClient(); const body = await request.json(); const { email, password, fullName, leetcodeUsername, gender } = body; try { diff --git a/app/api/auth/user/route.ts b/app/api/auth/user/route.ts index 7476d17..2c46f63 100644 --- a/app/api/auth/user/route.ts +++ b/app/api/auth/user/route.ts @@ -1,10 +1,11 @@ import prisma from '@/lib/database/prismaClient'; import { NextResponse } from 'next/server'; +import { createClient } from '@/utils/supabase/server' -export async function POST(request: Request) { +export async function GET(request: Request) { try { - - const { supabaseId } = await request.json(); + const supabase = await createClient(); + const supabaseId = (await supabase.auth.getUser()).data.user?.id; const userData = await prisma.user.findUnique({ where: { supabaseId }, select: { @@ -23,7 +24,7 @@ export async function POST(request: Request) { return NextResponse.json({ message: 'User not found' }, { status: 404 }); } - return NextResponse.json({ user: userData },{status: 200}); + return NextResponse.json({ user: userData }, { status: 200 }); } catch (err) { console.error('Error fetching user data:', err); return NextResponse.json({ message: 'Error fetching user data' }, { status: 500 }); diff --git a/components/AuthComponent/SigninForm.tsx b/components/AuthComponent/SigninForm.tsx index 9f8565a..6c78a8a 100644 --- a/components/AuthComponent/SigninForm.tsx +++ b/components/AuthComponent/SigninForm.tsx @@ -33,8 +33,8 @@ import { signinSchema } from "@/validations/validation"; type SigninFormValues = z.infer; export default function SigninForm() { - const { isSigningIn, signin, signinError } = useAuthStore(); - const router = useRouter(); + const router = useRouter() + const { isSigningIn,signin, signinError } = useAuthStore(); const [showPassword, setShowPassword] = useState(false); const form = useForm({ @@ -46,7 +46,7 @@ export default function SigninForm() { }); const onSubmit = (data: SigninFormValues) => { - signin(data, router); + signin(data, router) }; return ( diff --git a/components/header.tsx b/components/header.tsx index 8aad36c..4f55f73 100644 --- a/components/header.tsx +++ b/components/header.tsx @@ -1,23 +1,22 @@ -"use client" +"use client"; import { useState } from "react"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { ThemeToggle } from "@/components/theme-toggle"; import { supabase } from "@/lib/supabaseClient"; -import { useRouter } from 'next/navigation'; +import { useRouter } from "next/navigation"; +import { signout } from "@/app/actions/action"; const Navbar = ({ userId }: { userId?: string }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); - const router = useRouter(); + const router = useRouter(); return (