diff --git a/app/api/auth/[...nextauth]/_route.ts b/app/api/auth/[...nextauth]/_route.ts index 2e2718dcb..b3a1f4fbb 100644 --- a/app/api/auth/[...nextauth]/_route.ts +++ b/app/api/auth/[...nextauth]/_route.ts @@ -1,3 +1,5 @@ +// Ensure this route is accessible at /api/auth/[...nextauth] and both GET and POST are exported for NextAuth to work properly. +// If you see 405 errors, check your deployment and NEXTAUTH_URL configuration. import NextAuth from "next-auth" import { authOptions } from "@/lib/auth" diff --git a/components/user-auth-form.tsx b/components/user-auth-form.tsx index af745b382..95e75d899 100644 --- a/components/user-auth-form.tsx +++ b/components/user-auth-form.tsx @@ -34,20 +34,37 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) { async function onSubmit(data: FormData) { setIsLoading(true) - const signInResult = await signIn("email", { - email: data.email.toLowerCase(), - redirect: false, - callbackUrl: searchParams?.get("from") || "/dashboard", - }) + let signInResult: any = null; + try { + signInResult = await signIn("email", { + email: data.email.toLowerCase(), + redirect: false, + callbackUrl: searchParams?.get("from") || "/dashboard", + }); + } catch (err) { + setIsLoading(false); + return toast({ + title: "Something went wrong.", + description: "Could not reach the authentication server. Please try again later.", + variant: "destructive", + }); + } setIsLoading(false) - if (!signInResult?.ok) { + // Handle empty or invalid response + if (!signInResult || signInResult.error || !signInResult.ok) { + let description = "Your sign in request failed. Please try again."; + if (signInResult && signInResult.error === "Callback") { + description = "Authentication server returned an error. Please check your configuration or try again later."; + } else if (signInResult && signInResult.status === 405) { + description = "Authentication method not allowed. Please contact support or try again later."; + } return toast({ title: "Something went wrong.", - description: "Your sign in request failed. Please try again.", + description, variant: "destructive", - }) + }); } return toast({ diff --git a/env.mjs b/env.mjs index b3e960ab3..42a846bb4 100644 --- a/env.mjs +++ b/env.mjs @@ -1,3 +1,6 @@ +// IMPORTANT: Set NEXTAUTH_URL to your local or production domain to avoid 405 errors and authentication issues. +// For local dev: NEXTAUTH_URL=http://localhost:3000 +// For prod: NEXTAUTH_URL=https://yourdomain.com import { createEnv } from "@t3-oss/env-nextjs" import { z } from "zod"