본문 바로가기
개발/nest.js

nestjs + typeorm backend 회원가입 / 소스포함 (10)

by 아크투어 2023. 3. 29.
반응형

1. 개요

  • 지금까지 Backend개발을 하기위한 대략적인 프레임워크 작업을 완료하였다.
  • 회원가입까지 완료한 소스 제공한다. 필요하신분은 다운로드해서 사용하길 바란다.
  • 개발소스 : backend.zip
  • nestjs + typeorm backend 로 1~10편까지 작성되어있다. 필요한 부분은 찾아서 보길 바란다.

backend.zip
0.18MB
nestjs typerom

2. 회원가입

  • Postman에서 실행한 결과 화면이다.

nestjs 회원가입

 

3. 회원가입로직

  • 암호화 패키지설치
# bcrypt 패키지 설치

$ npm install --save bcrypt @types/bcrypt

 

  • auth 모듈설치
nest g module auth

nest g service auth

 

  • src > auth > auth.controller.ts
// auth.controller.ts

import {
  Body,
  Controller,
  Post,
  Req,
  Logger,
  UseFilters,
} from '@nestjs/common';
import { CreateUserDto } from '../user/dto/create-user.dto';
import { AuthService } from './auth.service';
import { CustomExceptionFilter } from '../common/exception/custom-exception';

@Controller('auth')
export class AuthController {
  private readonly logger = new Logger(AuthController.name);

  constructor(private readonly authService: AuthService) {}

  @Post('/signup')
  @UseFilters(CustomExceptionFilter)
  async signUp(
    @Req() req: Request,
    @Body() createUserDto: CreateUserDto,
  ): Promise<any> {
    return await this.authService.signUp(createUserDto);
  }
}

 

  • src > auth > auth.service.ts
// auth.service.ts

import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { UserService } from '../user/user.service';
import { CreateUserDto } from '../user/dto/create-user.dto';

@Injectable()
export class AuthService {
  constructor(private userService: UserService) {}

  async signUp(user: CreateUserDto): Promise<CreateUserDto> {
    let dbUser: CreateUserDto = await this.userService.findOne(user.userid);
    if (dbUser) {
      throw new HttpException('userid aleady used', HttpStatus.BAD_REQUEST);
    }
    return await this.userService.create(user);
  }
}

 

  • user.service.ts
// user.service.ts 일부분

  async create(dto: CreateUserDto) {
    const hashedPassword = await this.hashPassword(dto.userpw);

    const user = new User(
      dto.userid,
      hashedPassword,
      dto.usernm,
      dto.emailadres,
      dto.mbtlno,
      dto.age,
    );
    return this.userRepository.save(user);
  }
  
  async hashPassword(userpw: string): Promise<string> {
    const saltRounds = 10;
    const salt = await bcrypt.genSalt(saltRounds);
    const hashedPassword = await bcrypt.hash(userpw, salt);
    return hashedPassword;
  }

  async comparePasswords(
    userpw: string,
    hashedPassword: string,
  ): Promise<boolean> {
    return await bcrypt.compare(userpw, hashedPassword);
  }

 

 

4. 완료

  • 1편부터 10편까지 실무에서 사용할수 있을만한 nestjs + typeorm3 최신버전으로 백엔드 서버를 만들어 보았다.
  • 대략 nestjs를 접한지 3주정도 된것 같다. 아직 전문적이지는 않지만 많은 도움이 되길 바란다.
반응형