우리는 4번까지했음
토큰생성후, 클라는 요청을 보낼때 토큰을 같이보내는데, 이 토큰을 검증하는 작업을 할것임!
npm install @types/passport-jwt --save
* jwt-strategy 구현
import { PassportStrategy } from "@nestjs/passport";
import { Injectable, UnauthorizedException } from "@nestjs/common";
import { ExtractJwt, Strategy } from "passport-jwt";
import { InjectRepository } from "@nestjs/typeorm";
import { UserRepository } from "./user.repository";
import { User } from "./user.entity"; //passport아님에 주의
@Injectable() //어디에서나 사용가능토록
export class JwtStrategy extends PassportStrategy(Strategy){
constructor(
@InjectRepository(UserRepository) //db사용해야 하므로 주입
private userRepository : UserRepository
) {
super({
secretOrKey: 'Secret1234', //검증용 시크릿키, 모듈에서 설정해준거랑 같은값
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken() //Bearer토큰 타입으로 올거임
})
}
async validate(payload){
const {username} = payload;
const user : User = await this.userRepository.findOneBy({username});
if(!user){
throw new UnauthorizedException();
}
return user;
}
}
* 모듈 추가
@Module({
...
providers: [... JwtStrategy], //해당 auth모듈에서 사용가능토록
exports: [JwtStrategy, PassportModule] //다른 모듈에서 사용가능토록
* 컨트롤러
@Post('/test')
test(@Req() req){
console.log('req',req);
}
*문제 : return user 했는데, 안나옴
* 컨트롤러에서 미들웨어추가
@Post('/test')
@UseGuards(AuthGuard())
test(@Req() req){
console.log('req',req);
}
'JS > Nest.js' 카테고리의 다른 글
[Nest JS] 인증된 유저만 게시글 보고쓰기 구현 (0) | 2024.08.19 |
---|---|
[Nest JS] 커스텀 데코레이터(@) => 바로 user 가져오기 (0) | 2024.08.18 |
[Nest JS] JWT => accessToken 발급 (0) | 2024.08.18 |
[Nest JS] 로그인 구현 / bcrypt.compare salt issue (0) | 2024.08.18 |
[Nest JS] 비밀번호 암호화 구현 (0) | 2024.08.18 |