import { verify } from 'argon2'; import { useValidatedBody, z } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { const { email, password } = await useValidatedBody( event, z.object({ email: z.email().min(5).trim(), password: z.string().min(8) }) ); const user = await prisma.user.findUnique({ where: { deletedAt: null, email }, select: { id: true, password: true, name: true, role: true } }); if (!user || user.password.length <= 0) { console.warn(`Failed login attempted: Unknown email: ${email}`); throw createError({ status: 404, statusText: 'Not found!' }); } if (!(await verify(user.password, password))) { console.warn(`Failed login attempted: Wrong password: ${email}`); throw createError({ status: 404, statusText: 'Not found!' }); } console.warn(`Successful login attempted: ${email}`); await setUserSession(event, { user: { id: user.id, name: user.name, role: user.role }, loggedInAt: new Date() }); return { success: true, user: { id: user.id } }; });