솜이의 데브로그

[NestJS] 유저 서비스와 회원가입 본문

dev/NestJS

[NestJS] 유저 서비스와 회원가입

somsoming 2022. 1. 2. 17:33

Reference : https://wikidocs.net/150167

 

01. 유저 서비스와 회원 가입

유저 서비스를 다시 처음부터 만들어 보겠습니다. 우리가 만들 유저 서비스는 그다지 많지 않고 간략하게 구현하고자 합니다. 프론트 엔드의 UI 화면을 함께 만들지 않기 때문에 ...

wikidocs.net

 

  • 회원가입 화면을 통해 유저 정보를 입력받아 유저 생성 요청을 받는다.
  • DB에 유저 정보를 저장하고, 이메일을 발송하여 유효한 이메일인지 검증.
    • 이메일 본문에는 이메일 검증을 위한 요청으로의 링크가 포함
    • 링크를 통해 요청이 들어오면 회원가입 준비 단계에서 승인
  • 이메일 서비스는 유저 서비스와 분리되어야 한다.

 

회원가입

  • 이메일 검증 시 필요한 토큰을 uuid를 사용하기 위해 라이브러리를 설치한다.
  • $ npm i uuid
    $ npm i --save-dev @types/uuid
  • POST /users 엔드포인트 구현.
    • import { Body, Controller, Post } from '@nestjs/common';
      import { CreateUserDto } from './dto/create-user.dto';
      import { UsersService } from './users.service';
      
      @Controller('users')
      export class UsersController {
        constructor(private usersService: UsersService) { }
      
        @Post()
        public async createUser(@Body() dto: CreateUserDto): Promise<void> {
          const { name, email, password } = dto;
          await this.usersService.createUser(name, email, password);
        }
      }
    • 본문으로 유저 정보 전달받음.
    • UsersService에서는
      • 가입하려는 유저가 이미 존재하는지 검사, 존재한다면 에러 발생
      • 유저를 데이터베이스에 저장.
      • 유저가 회원가입 메일을 받고 링크를 눌러 이메일 인증을 할 때 다시 전달받을 토큰. 토큰에서는 유효기간을 설정하여 일정 기간 동안만 인증이 가능하도록 한다.
      • 회원 가입 인증 이메일 발송
      • 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);
          }
          ...
        }

 

'dev > NestJS' 카테고리의 다른 글

[NestJS] 기본 개념  (0) 2022.01.02