본문 바로가기

프로그래밍/NestJS

NestJS 입문 - 인증기능

반응형

이 강의는 인프런의 '따라하며 배우는 NestJS' 강의를 보고 학습한 글입니다.

 

[무료] 따라하며 배우는 NestJS - 인프런 | 강의

이 강의를 통해 NestJS에 대해서 배울 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

비밀번호 암호화하기

bcryptjs 이용

 

1. 원본 비밀번호를 저장 (최악)

2. 비밀번호를 암호화 키와 함께 암호 (양방향)

3. SHA256등 Hash로 암호화해서 저장 (단방향)

 

jwt

로그인을 할 때 고유 유저를 위한 토큰을 생성해야 함

jwt는 그 토큰을 생성할 때 사용하는 모듈

 

- Json Web Token

- 당사자간에 정보를 json개체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준

 

구조

Header: 메타 데이터

Payload: 유저 정보, 만료 기간, 주제 등

Verify Signature: 서명, 올바른 토큰인지 분별할 때 사용. Secret Text를 넣어줘야 한다

 

nestjs에서는 jwt를 쉽게 이용하기 위해 'passport' 모듈을 이용합니다.

 

// auth.module.ts
@Module({
  imports: [
    JwtModule.register({
      secret: 'Secret1234', // 사용할 시크릿 키
      signOptions:{
        expiresIn: 60 * 60, // 토큰의 유효 시간, 이 경우에는 1시간(3600초)
      }
    }),
    TypeOrmExModule.forFeature([UserRepository])
  ],
  controllers: [AuthController],
  providers: [AuthService]
})
export class AuthModule {}

 

! 토큰의 유저에 중요한 정보가 담기지 않게 조심할 것

 

// jwt.strategy.ts
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy){
    constructor(
        @InjectRepository(UserRepository)
        private userRepository: UserRepository
    ){
        super({
            secretOrKet: "Secret1234",
            jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
        })
    }

    async validate(payload){
        const {username} = payload;
        const user: User = await this.userRepository.findOneBy({username});

        if (!user){
            throw new UnauthorizedException();
        }

        return username;
    }
}

 

NestJS의 미들웨어가 불러지는 순서

middleware - guard - interceptor - pipe - controller - service - controller - interceptor - filter - client

 

커스텀 데코레이터 생성하기

// get-user.decorator.ts
import { createParamDecorator, ExecutionContext } from "@nestjs/common";
import { User } from "./user.entity";

export const GetUser = createParamDecorator((data, ctx: ExecutionContext): User => {
    const req = ctx.switchToHttp().getRequest();
    return req.user;
})

 

 

 

 

 

반응형

'프로그래밍 > NestJS' 카테고리의 다른 글

NestJS 입문 - 권한, 로그, 설정  (0) 2023.06.06
NestJS 입문 - pipe, TypeORM  (0) 2023.06.06
NestJS 입문 - 기본 요소, CRUD  (0) 2023.05.27