Files
pichunt/server/api/auth/register.post.ts
T

51 lines
1.1 KiB
TypeScript

import { hash } from 'argon2';
import { useValidatedBody, z } from 'h3-zod';
import prisma from '~~/lib/prisma';
export default defineEventHandler(async (event) => {
await clearUserSession(event);
const { email, password, name } = await useValidatedBody(
event,
z.object({
email: z.email().min(5).trim(),
password: z.string().min(8),
name: z.string().min(1).max(64).trim()
})
);
const exists = await prisma.user.findUnique({
where: {
email
},
select: { id: true }
});
if (exists !== null) {
throw createError({
status: 409,
statusText: 'User with that email already exists!'
});
}
const passwordHash = await hash(password);
const user = await prisma.user.create({
data: {
password: passwordHash,
name,
email
},
select: { id: true, name: true, role: true }
});
console.warn(`Successful register: ${email}`);
await setUserSession(event, {
loggedInAt: new Date().toISOString(),
user: user
});
return { success: true, user: { id: user.id } };
});