Files
pichunt/server/api/auth/login.post.ts
T
2025-08-20 23:40:00 +02:00

47 lines
1.1 KiB
TypeScript

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 } };
});