하루 지났는데 가물가물...
우선 공식 문서에서
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({}) 를 사용하여 환경변수로 등록하는것으로
오늘 퇴근 후 작업이 필요
그럼 이만 출근 준비 하러~
이전글
NestJS Authentication(1) Login
니콜라스 NestJS 강좌를 듣고 토이프로젝트의 백엔드를 NestJS로 선택 CLUD 코딩 중 인증부분이 필요하여 공식 문서를 찾아 구현 NestJS 공식 문서에서 Authentication 부분을 크롬에서 번역하여 공부를
leannet.tistory.com
다음글
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 |