"use client"; import { createClient } from "@/utils/supabase/client"; import { useRouter } from "next/navigation"; import React, { useState } from "react"; export default function AdminLoginPage() { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const router = useRouter(); const supabase = createClient(); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(null); const { error: signInError } = await supabase.auth.signInWithPassword({ email, password, }); if (signInError) { setError(signInError.message); setLoading(false); return; } // Verify the user is an admin const { data: { user }, } = await supabase.auth.getUser(); if (!user) { setError("Authentication failed."); setLoading(false); return; } const { data: adminUser } = await supabase .from("admin_users") .select("role") .eq("user_id", user.id) .single(); if (!adminUser) { await supabase.auth.signOut(); setError("You do not have admin access."); setLoading(false); return; } router.push("/admin"); router.refresh(); }; return (

Admin Login

Sign in to the Confessions of Grace admin panel.

{error && (
{error}
)}
setEmail(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-accent focus:border-transparent" required />
setPassword(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-accent focus:border-transparent" required />
); }