'use server'; import bcrypt from 'bcryptjs'; import prisma from '@/lib/prisma'; import { z } from 'zod'; import { redirect } from 'next/navigation'; const RegisterSchema = z.object({ email: z.string().email(), password: z.string().min(6), name: z.string().min(2), }); export async function register(prevState: string | undefined, formData: FormData) { const validatedFields = RegisterSchema.safeParse({ email: formData.get('email'), password: formData.get('password'), name: formData.get('name'), }); if (!validatedFields.success) { return 'Invalid fields. Failed to register.'; } const { email, password, name } = validatedFields.data; try { const existingUser = await prisma.user.findUnique({ where: { email: email.toLowerCase() } }); if (existingUser) { return 'User already exists.'; } const hashedPassword = await bcrypt.hash(password, 10); await prisma.user.create({ data: { email: email.toLowerCase(), password: hashedPassword, name, }, }); // Attempt to sign in immediately after registration // We cannot import signIn here directly if it causes circular deps or issues, // but usually it works. If not, redirecting to login is fine. // Let's stick to redirecting to login but with a clear success message? // Or better: lowercase the email to fix the potential bug. } catch (error) { console.error('Registration Error:', error); return 'Database Error: Failed to create user.'; } redirect('/login'); }