Add login and register

This commit is contained in:
2025-08-04 20:23:19 +02:00
parent 8aa8be7e9f
commit 9320adb6cd
11 changed files with 524 additions and 21 deletions
+46
View File
@@ -0,0 +1,46 @@
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 as any, {
user: {
id: user.id,
name: user.name,
role: user.role
},
loggedInAt: new Date()
});
return { success: true, user: { id: user.id } };
});