"use client"; import { useState } from "react"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; import Link from "next/link"; export default function Login() { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [isLoading, setIsLoading] = useState(false); const router = useRouter(); const handleLogin = async (e) => { e.preventDefault(); setIsLoading(true); setError(""); try { console.log("Attempting to sign in with:", username); // First try using the NextAuth signIn method try { const result = await signIn("credentials", { redirect: false, username, password, callbackUrl: "/team-selection", }); if (result?.error) { throw new Error(result.error); } // If the user has a team, redirect directly to the team page if (result?.url) { // Extract the teamId from the URL or session data if available // This part depends on how your auth system returns the result router.push(`/${session?.user?.teamId || ""}`); } else { // Otherwise go to team selection router.push("/team-selection"); } return; } catch (signInError) { console.error("Error with signIn method:", signInError); console.log("Falling back to direct API call"); // Fall back to direct fetch approach with explicit JSON content-type const loginResponse = await fetch("/api/auth/callback/credentials", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username, password, callbackUrl: "/team-selection", }), credentials: "include", // Important for cookie handling }); if (!loginResponse.ok) { const errorData = await loginResponse .json() .catch(() => ({ error: "Failed to parse error response" })); throw new Error( errorData.error || `Login failed with status ${loginResponse.status}` ); } // On successful login const userData = await loginResponse .json() .catch(() => ({ url: "/team-selection" })); // Allow time for cookie to be set setTimeout(() => { router.push(userData.url || "/team-selection"); }, 100); } } catch (err) { setError(err.message || "An unexpected error occurred"); console.error("Login error:", err); setIsLoading(false); } }; return (
←
Login
setUsername(e.target.value)} required className="auth-input" />
setPassword(e.target.value)} required className="auth-input" />
{error &&
{error}
}
); }