// File: app/(auth)/login/page.tsx "use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; import { Eye, EyeOff, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; // กำหนด Schema สำหรับตรวจสอบข้อมูลฟอร์ม const loginSchema = z.object({ username: z.string().min(1, "กรุณาระบุชื่อผู้ใช้งาน"), password: z.string().min(1, "กรุณาระบุรหัสผ่าน"), }); type LoginValues = z.infer; export default function LoginPage() { const router = useRouter(); const [isLoading, setIsLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const [errorMessage, setErrorMessage] = useState(null); // ตั้งค่า React Hook Form const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), defaultValues: { username: "", password: "", }, }); // ฟังก์ชันเมื่อกด Submit async function onSubmit(data: LoginValues) { setIsLoading(true); setErrorMessage(null); try { // เรียกใช้ NextAuth signIn (Credential Provider) // หมายเหตุ: เรายังไม่ได้ตั้งค่า AuthOption ใน route.ts แต่นี่คือโค้ดฝั่ง Client ที่ถูกต้อง const result = await signIn("credentials", { username: data.username, password: data.password, redirect: false, // เราจะจัดการ Redirect เอง }); if (result?.error) { // กรณี Login ไม่สำเร็จ console.error("Login failed:", result.error); setErrorMessage("เข้าสู่ระบบไม่สำเร็จ: ชื่อผู้ใช้งานหรือรหัสผ่านไม่ถูกต้อง"); return; } // Login สำเร็จ -> ไปหน้า Dashboard router.push("/dashboard"); router.refresh(); // Refresh เพื่อให้ Server Component รับรู้ Session ใหม่ } catch (error) { console.error("Login error:", error); setErrorMessage("เกิดข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้ง"); } finally { setIsLoading(false); } } return ( LCBP3 DMS กรอกชื่อผู้ใช้งานและรหัสผ่านเพื่อเข้าสู่ระบบ
{errorMessage && (
{errorMessage}
)} {/* Username Field */}
{errors.username && (

{errors.username.message}

)}
{/* Password Field */}
{/* ปุ่ม Show/Hide Password */}
{errors.password && (

{errors.password.message}

)}
); }