$ npm i --save @nestjs/passport passport-jwt
$ npm i --save-dev @types/passport-jwt
import { PassportStrategy } from "@nestjs/passport";
import { Request } from "express";
import { Strategy } from "passport-jwt";
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: (req: Request) => {
return req.cookies['access_token'];
},
secretOrKey: process.env.JWT_SECRET,
})
}
async validate(payload) {
console.log(payload);
return payload;
}
}
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
가드는 다른 프로바이더들과 다르게 모듈에 등록하지 않고 contoller에서 @UseGuards() 데코레이터를 사용하여 등록을 한다.
@Get('test')
@UseGuards(JwtAuthGuard)
async test(@Req() req) {
console.log(req.user);
}
등록이 완료 되면 strategy에 따라 jwt에 담긴 내용을 req.user에 담아 준다.