From 7f907660c8b1263852ac8fb4270ef9db521a3bd2 Mon Sep 17 00:00:00 2001 From: Ajax Davis Date: Sat, 17 Jan 2026 11:17:47 +1000 Subject: [PATCH] fix(auth): use better-auth client for password reset - Use authClient.forgetPassword() instead of raw fetch - Use authClient.resetPassword() instead of raw fetch - Fixes 404 error on /api/auth/forget-password --- .../src/app/(auth)/forgot-password/page.tsx | 19 ++++++------------- .../src/app/(auth)/reset-password/page.tsx | 18 ++++++------------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/apps/web/src/app/(auth)/forgot-password/page.tsx b/apps/web/src/app/(auth)/forgot-password/page.tsx index af1403c..32caa00 100644 --- a/apps/web/src/app/(auth)/forgot-password/page.tsx +++ b/apps/web/src/app/(auth)/forgot-password/page.tsx @@ -5,6 +5,7 @@ import { Input } from '@tpmjs/ui/Input/Input'; import { Label } from '@tpmjs/ui/Label/Label'; import Link from 'next/link'; import { useState } from 'react'; +import { authClient } from '~/lib/auth-client'; export default function ForgotPasswordPage() { const [email, setEmail] = useState(''); @@ -18,21 +19,13 @@ export default function ForgotPasswordPage() { setLoading(true); try { - // Call the password reset API endpoint - const response = await fetch('/api/auth/forget-password', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - email, - redirectTo: `${window.location.origin}/reset-password`, - }), + const { error: resetError } = await authClient.forgetPassword({ + email, + redirectTo: `${window.location.origin}/reset-password`, }); - if (!response.ok) { - const data = await response.json(); - setError(data.message || 'Failed to send reset email'); + if (resetError) { + setError(resetError.message || 'Failed to send reset email'); setLoading(false); return; } diff --git a/apps/web/src/app/(auth)/reset-password/page.tsx b/apps/web/src/app/(auth)/reset-password/page.tsx index 3d96d7a..73d2a61 100644 --- a/apps/web/src/app/(auth)/reset-password/page.tsx +++ b/apps/web/src/app/(auth)/reset-password/page.tsx @@ -6,6 +6,7 @@ import { Label } from '@tpmjs/ui/Label/Label'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { Suspense, useState } from 'react'; +import { authClient } from '~/lib/auth-client'; function ResetPasswordForm() { const searchParams = useSearchParams(); @@ -39,20 +40,13 @@ function ResetPasswordForm() { setLoading(true); try { - const response = await fetch('/api/auth/reset-password', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - token, - newPassword: password, - }), + const { error: resetError } = await authClient.resetPassword({ + newPassword: password, + token, }); - if (!response.ok) { - const data = await response.json(); - setError(data.message || 'Failed to reset password'); + if (resetError) { + setError(resetError.message || 'Failed to reset password'); setLoading(false); return; }