NestJS

Nest

Tutorial Nest: Registro de usuarios

Nest registro usuarios: creación y manejo. Domina la creación y manejo de sistemas de registro de usuarios en Nest con ejemplos prácticos.

Introducción

Crear un método de registro para crear nuevos usuarios en el backend a nivel de base de datos.

Este método estará en un controlador y será accesible desde el frontend por cualquier usuario no autenticado.

Instalar librerías

Instalar librería para cifrar contraseña de nuevos usuarios:

npm install bcrypt

Funcionamiento de bcrypt.

Crear controlador

Para crear el método de registro se puede hacer en un controlador como por ejemplo UserController o AuthenticationController:

nest generate controller auth/authentication

Esto genera un archivo authentication.controller.ts en la carpeta auth.

Desarrollar registro

Dentro del controlador AuthenticationController inyectamos el UserRepository para poder comprobar la existencia de usuarios por email y para crear nuevos usuarios.

import { Controller } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from 'src/user/user.model';
import { Repository } from 'typeorm';

@Controller('authentication')
export class AuthenticationController {

    constructor(
        @InjectRepository(User) private userRepository: Repository<User>
    ) {}
}

Creamos la interfaz register.dto.ts para recibir los datos del registro (email y password):

export interface Register {
    email: string;
    password: string;
    // ... agregar más campos si se desean para el registro ...
}

Debe existir una clase User y una configuración con TypeORM para tener repositorio para entidad User.

Archivo user.model.ts:

import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
import { Role } from "./role.enum";

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column({unique: true})
    email: string;

    @Column()
    password: string;

    @Column({nullable: true}) // opcional
    phone: string;

    @Column({nullable: true}) // opcional
    addressStreet: string;

    @Column({nullable: true}) // opcional
    photoUrl: string;

    @Column({
        type: 'enum',
        enum: Role,
        default: Role.USER
    })
    role: Role;
}

Dentro del controlador crearíamos el método de registro llamado register():

    @Post('register')
    async register(@Body() register: Register) {
        
        const exists = await this.userRepository.existsBy({
            email: register.email
        });

        if(exists)
            throw new ConflictException("Email ocupado");// 409

        // Cifrar contraseña. El 10 es la fuerza de cifrado
        const password = bcrypt.hashSync(register.password, 10);

        // crear usuario en base de datos
        const user: User = {
            id: 0,
            email: register.email,
            password: password,
            phone: null,
            role: Role.USER,
            addressStreet: null,
            photoUrl: null
        };
        await this.userRepository.save(user);
    }

Se debe comprobar que se registran usuarios en base de datos con contraseña cifrada:

Certifícate en Nest con CertiDevs PLUS

Ejercicios de esta lección Registro de usuarios

Evalúa tus conocimientos de esta lección Registro de usuarios con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Nest

Accede a todas las lecciones de Nest y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Nest

Supera todos los ejercicios de programación del curso de Nest y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Crear la entidad User
  • Crear método para recibir datos de registro
  • Verificar que el email a registrar no está ocupado
  • Cifrar la contraseña
  • Crear cuenta de usuario