반응형
이 강의는 인프런의 '따라하며 배우는 NestJS' 강의를 보고 학습한 글입니다.
비밀번호 암호화하기
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 |