하루 지났는데 가물가물...
우선 공식 문서에서
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({}) 를 사용하여 환경변수로 등록하는것으로
오늘 퇴근 후 작업이 필요
그럼 이만 출근 준비 하러~
이전글
다음글
'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 |