반응형
이 강의는 인프런의 '따라하며 배우는 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 |