[TIL_2023.12 .28] Nest.JS-로그인/인증- cookie 넣는법

김효진·2023년 12월 28일
0

nestjs 강의를 들으면서 로그인/인증 기능을 배웠는데
graphql을 사용하는 방식으로 진행해서 req,res를 가져오는 방식이 조금 달랐다.
나는 graphql을 사용하지 않고 프로젝트를 진행하고 싶어서 공식문서와 구글 검색을 통해 아래와 같이 코드를 짰다.

auth.controller.ts

import {
    Body,
    Controller,
    Post,
    Res,
} from '@nestjs/common';
import { AuthService } from './auth.service';
import { Response } from 'express';


@Post()
    login(
        @Body('email') email: string, //
        @Body('password') password: string, //
        @Res({ passthrough: true }) res: Response, // res.cookie 셋팅을 위해 추가해줌
    ): Promise<string> {
        return this.authService.login({ email, password, res });
    }

auth.service.ts

async login({ email, password, res }: IAuthServiceLogin): Promise<string> {
        const user = await this.usersService.findOneByEmail({ email });
        if (!user)
            throw new UnprocessableEntityException(
                '존재하지 않는 이메일입니다.',
            );

        const isAuth = await bcrypt.compare(password, user.password);
        if (!isAuth)
            throw new UnprocessableEntityException('비밀번호가 틀렸습니다.');

        // 리프레시토큰 만들어 브라우저 쿠키에 저장해 보내줌
        this.setRefreshToken({ user, res });

		// 엑세스토큰 만들어 리턴
        return this.getAccessToken({ user });
    }
    
    // 리프레시토큰 만드는 함수
    setRefreshToken({ user, res }: IAuthServiceSetRefreshToken): void {
        // 리프레시토큰 생성
        const refreshToken = this.jwtService.sign(
            { sub: user.id },
            { secret: process.env.REFRESH_SECRET_KEY, expiresIn: '2w' },
        );

		// 쿠키 셋팅 1번 방법 -> cookie-parser, @types/cookie-parser 두 패키지 다운받아서 import 하여 사용 가능.d
        // res.cookie('set-Cookie', refreshToken, {
        //     domain: 'localhost',
        //     path: '/',
        //     httpOnly: true,
        // });
        
		// 쿠키 셋팅 2번 방법
        res.setHeader('set-Cookie', `refreshToken = ${refreshToken}; path=/;`);
    }
profile
더 많은 사람들이 더 좋은 정보와 서비스를 누릴 수 있게!!

0개의 댓글