[Nestjs]프로바이더 - 회원 가입 기능 구현

The Dragonite·2023년 12월 2일
0

Nestjs

목록 보기
7/9
post-thumbnail

회원 가입 기능 구현

이번 포스트에서는 회원 가입 로직을 구현하겠다. 데이터를 영속화하는 DB작업은 추후에 TypeORM을 사용하여 할 것이므로 그 부분은 생략하자.

우선, nest g s Users 명령을 통해서 UsersService 프로바이더를 생성하자.


유저 서비스에 회원 가입 로직 구현하기

회원 가입 요청은 POST /users 엔드포인트로 들어올 것이므로 아래와 같이 수정하자.

@Controller('users')
export class UsersController {
  constructor(private usersService: UsersService) {} // 컨트롤러에 UsersService프로바이더를 주입하자
  
  @Post()// /users 엔드포인트로 들어오는 POST요청을 처리한다.
  async createUser(@Body() dto: CreateUserDto): Promise<void> {
    const { name, email, password } = dto; // 비구조화할당 ES6 문법
    await this.usersService.createUser(name, email, password);
  }
}

이메일 검증시에 필요한 토큰을 발급하기 위하여 자주사용되는 uuid 라이브러리를 활용하자.

$ npm i uuid
$ npm i --save-dev @types/uuid //타입 스크립트에 uuid 라이브러리에서 사용되는 것들에 대한 타입이 저장되어 있다.

UsersService 프로바이더의 구현은 다음과 같다.

import * as uuid from 'uuid';
import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  async createUser(name: string, email: string, password: string) {
  	await this.checkUserExists(email);
    
    const signupVerifyToken = uuid.v1();
    
    await this.saveUser(name, email, password, signupVerifyToken);
    await this.sendMemberJoinEmail(email, signupVerifyToken);
  }
  
  private checkUserExists(email: string) {
  	return false;
  }
  
  private saveUser(
  name: string,
  email: string,
  password: string,
  signupVerifyToken: string) {
  	return;	
  }
  
  private sendMemberJoinEmail(email: string, signupVerifyToken: string) {
  	// 추후에 새로 EmailService를 생성하여 이메일을 전송하여 토큰을 확인하는 기능을 구현할 것이다.
    await this.emailService.sendMemberJoinVerification(email, signupVerifyToken);
    
  }
  
}

createUser() 함수는 비동기 함수로 구성되어 있는데 회원 가입을 구현하기 위하여 다음과 같은 프로세스로 함수를 구성하였다.

  1. checkUserExits() : 사용자의 입력을 통하여 이메일을 받은 후에 이 이메일이 이미 가입되어 있는지 확인하는 절차이다. 가입되어 있지 않다면 다음 절차로 이동한다.
  2. saveUser() : 가입되어 있지 않은 사용자이므로 DB에 사용자의 정보를 저장한다. 지금 같은 경우에는 DB를 구현해두지 않았기 때문에 우선 넘어가는 것으로 한다.
  3. sendMemberJoinEmail() : uuid.v1() 으로 발급 받은 토큰을 사용자가 가입할 때 사용한 이메일에 넣어 보내어서 사용자가 이메일의 버튼을 눌러 다시 서버로 토큰을 전송하여 비교하는 과정을 구현하여, 사용자 본인의 이메일이 맞는지 확인하는 과정이다. 이 모든 경우를 통과한 경우 가입이 완료되는 것으로 한다.

이 포스트는 위 책을 기반으로 작성하고 있습니다...

0개의 댓글

관련 채용 정보