본문 바로가기

Learning/NestJS

NestJS Authentication(2) jwt+환경변수

하루 지났는데 가물가물...

우선 공식 문서에서 

local-auth.guard.ts

import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class LocalAuthGuard extends AuthGuard('local') {}

 

위에 부분은 일단 넘어 가자 

로그인되지 않은 사용자의 페이지 지정부분은 나중에 우선 생각을 하고 

jwt 먼저 하자

 

import { Injectable } from '@nestjs/common';
import { UsersService } from '../users/users.service';
import { JwtService } from '@nestjs/jwt';

@Injectable()
export class AuthService {
  constructor(
    private usersService: UsersService,
    private jwtService: JwtService
  ) {}

  async validateUser(username: string, pass: string): Promise<any> {
    const user = await this.usersService.findOne(username);
    if (user && user.password === pass) {
      const { password, ...result } = user;
      return result;
    }
    return null;
  }

  async login(user: any) {
    const payload = { username: user.username, sub: user.userId };
    return {
      access_token: this.jwtService.sign(payload),
    };
  }
}

로그인 함수에 access_token에 토큰을 만들었다.

생각보다 엄청 간단하다.

 

export const jwtConstants = {
  secret: 'secretKey',
};

키를 생성하는부분인데 이부분은 환경변수에 넣고 불러오는것으로 변경을 하자.

 

이제 열 auth.module.ts에 auth폴더와 같이 업데이트 :

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { UsersModule } from '../users/users.module';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';

@Module({
  imports: [
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: jwtConstants.secret,
      signOptions: { expiresIn: '60s' },
    }),
  ],
  providers: [AuthService, LocalStrategy],
  exports: [AuthService],
})
export class AuthModule {}

secret: jwtConstants.secret,

이부분이 위의 키지정인데 여기서 환경변수에서 가져온 키를 넣는 식으로 변경이 필요

 

나온김에 환경변수를 설정 하기 위해서

add @nestjs/config

root 디랙토리에 .env.dev 를 만들도 테스트할 내용을 넣는다

내용이 더 있으면 엔터 쳐서 계속 넣으면 된다. 쉼표 같은 구분자 없어도 됨

DATABASE_URL=envtest

 

환경변수 유효성 검사 joi 패키지

import Joi from 'joi';

ConfigModule.forRoot({
  isGlobal: true,
  envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.prod'
  validationSchema: Joi.object({
    NODE_ENV: Joi.string().valid('dev', 'prod').required(),
    DB_HOST: Joi.string().required(),
    DB_PORT: Joi.string().required(),
    DB_USERNAME: Joi.string().required(),
    DB_PASSWORD: Joi.string().required(),
    DB_DATABASE: Joi.string().required(),
  }),
}),

 

 

 

다른 파일에 사용하고 싶은 service의 module에 

import {ConfigModule} from '@nestjs/config';

@Module({
    imports: [ConfigModule],

그다음 사용할 service에 

import { ConfigService } from '@nestjs/config';

@Injectable()
export class MemberService {
    constructor(
        private readonly config: ConfigService,
        
        
        ...
 
 
console.log(this.config.get('DATABASE_URL'));
        
        

 

이렇게 환경변수를 사용하면 된다.

현재 TypeORM의 설정 파일이 ormconfig.json로 되어 있는데

전부 환경변수로 변경하고 app.module에 

TypeOrmModule.forRoot({}) 를 사용하여 환경변수로 등록하는것으로 

오늘 퇴근 후 작업이 필요

 

그럼 이만 출근 준비 하러~

 

이전글 

leannet.tistory.com/69

 

NestJS Authentication(1) Login

니콜라스 NestJS 강좌를 듣고 토이프로젝트의 백엔드를 NestJS로 선택 CLUD 코딩 중 인증부분이 필요하여 공식 문서를 찾아 구현 NestJS 공식 문서에서 Authentication 부분을 크롬에서 번역하여 공부를

leannet.tistory.com

다음글 

leannet.tistory.com/72

 

NestJS Authentication(3) 환경변수

41살 개발자로 이직이 가능한 나이는 지난것 같은... 토이 프로잭트를 한다고 하니 주변분들이 그거 돈되나 라고 물어 보신다.. 훗... 요 몇일간 현타가 왔다.... 내가 지금 새롭게 배우고 새로운게

leannet.tistory.com

 

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

NestJS Authentication(4) jwt(수정)  (0) 2021.01.11
NestJS Authentication(3) 환경변수  (0) 2021.01.07
NestJS Authentication(1) Login  (0) 2021.01.03
DTO (Data Transfer Object)  (0) 2021.01.02
NestJS 시작 하다  (0) 2021.01.01