Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

register.ts

Blame
    • Sofiane Lasri's avatar
      9e669cb8
      feat(auth): enhance session management and improve user flow · 9e669cb8
      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
      9e669cb8
      History
      feat(auth): enhance session management and improve user flow
      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,
        };
    });