"use client"; import { useState, Suspense } from "react"; import { signIn, getSession } from "next-auth/react"; import { useRouter, useSearchParams } from "next/navigation"; import Link from "next/link"; import Image from "next/image"; import { GoogleSignInButton } from "@/components/shared/google-sign-in-button"; function safeInternalPath(raw: string | null): string { if (!raw || !raw.startsWith("/") || raw.startsWith("//")) return "/"; return raw; } function LoginForm() { const router = useRouter(); const searchParams = useSearchParams(); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); setLoading(true); const formData = new FormData(e.currentTarget); const email = formData.get("email") as string; const password = formData.get("password") as string; const result = await signIn("credentials", { email, password, redirect: false, }); setLoading(false); if (result?.error) { setError(result.error); } else { const callbackPath = safeInternalPath(searchParams.get("callbackUrl")); const session = await getSession(); // Admin selalu diarahkan ke dashboard /admin setelah login — kecuali // callbackUrl memang menuju sub-halaman admin (deep link dari /admin/...). // callbackUrl non-admin (mis. "/" sisa dari percobaan login Google) tidak // boleh membuat admin "nyangkut" di halaman publik. const next = session?.user?.isAdmin && !callbackPath.startsWith("/admin") ? "/admin" : callbackPath; router.push(next); router.refresh(); } } return (
{/* Background image */} {/* Dark overlay */}
{/* Header */}
SeTrip SeTrip

Login dan mulai petualanganmu bareng

{/* Card */}
{error && (
{error}
)}
atau

Belum punya akun?{" "} Daftar sekarang

); } export default function LoginPage() { return ( ); }