Select Git revision
register.ts
-
Sofiane Lasri authored
- Add type annotations for H3Event and EventHandlerRequest - Refactor session generation to include user info in cookies - Improve password validation for non-development environments - Simplify session setting in login and register handlers - Adjust routing logic after login and registration - Remove redundant router pushes in auth store functions - Update auth middleware to use session token for validation - Display error messages on login and registration failures
Sofiane Lasri authored- Add type annotations for H3Event and EventHandlerRequest - Refactor session generation to include user info in cookies - Improve password validation for non-development environments - Simplify session setting in login and register handlers - Adjust routing logic after login and registration - Remove redundant router pushes in auth store functions - Update auth middleware to use session token for validation - Display error messages on login and registration failures
register.ts 1.16 KiB
import {hash} from 'bcrypt';
import {generateSession} from "~/server/utils/generateSession";
import prisma from "~/lib/prisma";
import {EventHandlerRequest, H3Event} from "h3";
export default defineEventHandler(async (event: H3Event<EventHandlerRequest>) => {
const userExists = await prisma.user.count();
if (userExists) {
throw createError({statusCode: 403, statusMessage: 'User already exists'});
}
const {email, name, password} = await readBody(event);
if ((!/[A-Z]/.test(password) || !/[a-z]/.test(password) || !/[0-9]/.test(password) || !/[^A-Za-z0-9]/.test(password)) && process.env.NODE_ENV !== 'development') {
return new Response('Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', {
status: 422,
});
}
const hashedPassword = await hash(password, 10);
const user = await prisma.user.create({
data: {
email,
name,
password: hashedPassword,
},
});
await generateSession(user, event);
return {
id: user.id,
email: user.email,
name: user.name,
};
});