// components/auth/simple-reauth-modal.tsx "use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { z } from "zod" import { verifyExternalCredentials } from "@/lib/users/auth/verifyCredentails" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { toast } from "@/hooks/use-toast" import { Shield, AlertCircle } from "lucide-react" const reAuthSchema = z.object({ password: z.string().min(1, "Password is required"), }) type ReAuthFormValues = z.infer interface SimpleReAuthModalProps { isOpen: boolean onSuccess: () => void userEmail: string } export function SimpleReAuthModal({ isOpen, onSuccess, userEmail }: SimpleReAuthModalProps) { const [isLoading, setIsLoading] = React.useState(false) const [attemptCount, setAttemptCount] = React.useState(0) const form = useForm({ resolver: zodResolver(reAuthSchema), defaultValues: { password: "", }, }) async function onSubmit(data: ReAuthFormValues) { setIsLoading(true) try { // 직접 인증 함수 호출 (API 호출 없이) const authResult = await verifyExternalCredentials( userEmail, data.password ) if (!authResult.success || !authResult.user) { setAttemptCount(prev => prev + 1) if (attemptCount >= 2) { toast({ title: "Too many failed attempts", description: "Please wait a moment before trying again.", variant: "destructive", }) setTimeout(() => setAttemptCount(0), 30000) return } toast({ title: "Authentication failed", description: `Invalid password. ${2 - attemptCount} attempts remaining.`, variant: "destructive", }) form.setError("password", { type: "manual", message: "Invalid password" }) } else { // 인증 성공 setAttemptCount(0) onSuccess() form.reset() toast({ title: "Authentication successful", description: "You can now access account settings.", }) } } catch (error) { console.error("Re-authentication error:", error) toast({ title: "Error", description: "An unexpected error occurred. Please try again.", variant: "destructive", }) } finally { setIsLoading(false) } } React.useEffect(() => { if (!isOpen) { form.reset() setAttemptCount(0) } }, [isOpen, form]) return ( {}}> Verify Your Password Please enter your password to access account settings.

Email: {userEmail}

{attemptCount >= 2 && (

Too many failed attempts. Please wait 30 seconds.

)} ( Password = 3 || isLoading} {...field} autoFocus /> )} />
) }