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.

Aprende Nest GRATIS y certifícate

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:

Aprende Nest GRATIS online

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.

Accede GRATIS a Nest y certifícate

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