From d7d52ef1a813373fdc46353409064f660eb5ab9d Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Mon, 6 Apr 2026 22:41:37 -0400 Subject: [PATCH] refactor: migrate auth pages to better-auth client --- src/app/auth/signin/page.tsx | 45 ++++++++++++++++++++------------ src/app/auth/signout/page.tsx | 48 ++++++++++++++++++++--------------- src/components/sign-in.tsx | 8 +++--- 3 files changed, 61 insertions(+), 40 deletions(-) diff --git a/src/app/auth/signin/page.tsx b/src/app/auth/signin/page.tsx index a6791a3..3497e46 100644 --- a/src/app/auth/signin/page.tsx +++ b/src/app/auth/signin/page.tsx @@ -1,15 +1,35 @@ -import { signIn, auth } from "@/auth" +"use client" + +import { signIn, useSession } from "@/lib/auth-client" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { redirect } from "next/navigation" import Link from "next/link" +import { useRouter } from "next/navigation" +import { useEffect } from "react" -export default async function SignInPage() { - const session = await auth() +export default function SignInPage() { + const { data: session, isPending } = useSession() + const router = useRouter() + + useEffect(() => { + if (session?.user) { + router.push("/") + } + }, [session, router]) + + const handleSignIn = async () => { + await signIn.social({ + provider: "authentik", + callbackURL: "/", + }) + } + + if (isPending) { + return null + } - // If already signed in, redirect to home if (session?.user) { - redirect("/") + return null } return ( @@ -22,16 +42,9 @@ export default async function SignInPage() { -
{ - "use server" - await signIn("authentik", { redirectTo: "/" }) - }} - > - -
+
diff --git a/src/app/auth/signout/page.tsx b/src/app/auth/signout/page.tsx index e676031..889d3e7 100644 --- a/src/app/auth/signout/page.tsx +++ b/src/app/auth/signout/page.tsx @@ -1,14 +1,29 @@ -import { signOut, auth } from "@/auth" +"use client" + +import { signOut, useSession } from "@/lib/auth-client" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { redirect } from "next/navigation" import Link from "next/link" +import { useRouter } from "next/navigation" +import { useEffect } from "react" -export default async function SignOutPage() { - const session = await auth() - - if (!session) { - redirect("/") +export default function SignOutPage() { + const { data: session, isPending } = useSession() + const router = useRouter() + + useEffect(() => { + if (!session) { + router.push("/") + } + }, [session, router]) + + const handleSignOut = async () => { + await signOut() + router.push("/") + } + + if (isPending || !session) { + return null } return ( @@ -25,19 +40,12 @@ export default async function SignOutPage() {
Currently signed in as
{session.user?.name || session.user?.email}
- +
-
{ - "use server" - await signOut({ redirectTo: "/" }) - }} - > - -
- + + @@ -46,4 +54,4 @@ export default async function SignOutPage() {
) -} \ No newline at end of file +} diff --git a/src/components/sign-in.tsx b/src/components/sign-in.tsx index f1bff96..5bddf77 100644 --- a/src/components/sign-in.tsx +++ b/src/components/sign-in.tsx @@ -1,20 +1,20 @@ "use client" -import { signOut, useSession } from "next-auth/react" +import { signOut, useSession } from "@/lib/auth-client" import { Button } from "@/components/ui/button" import { useRouter } from "next/navigation" export default function SignIn() { - const { data: session, status } = useSession() + const { data: session, isPending } = useSession() const router = useRouter() const handleSignOut = async () => { - await signOut({ redirect: false }) + await signOut() router.push("/") router.refresh() } - if (status === "loading") { + if (isPending) { return
}