import {
Injectable,
ExecutionContext,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
constructor(
private readonly jwtService: JwtService, // @Inject(forwardRef(() => AdminsService)) // private readonly adminsService: AdminsService,
) {
super();
}
canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest();
const { authorization } = request.headers;
if (authorization === undefined) {
throw new HttpException('Token 전송 안됨', HttpStatus.UNAUTHORIZED);
}
//const token = authorization.replace('Bearer ', authorization);
const token = authorization.replace('Bearer ', '');
//console.log(token, 'token!!!');
request.user = this.validateToken(token);
return true;
}
validateToken(token: string) {
const secretKey = process.env.SECRET ? process.env.SECRET : 'dev';
try {
const data = this.jwtService.verify(token, {
secret: secretKey,
});
console.log(data, '11번가데이터');
return data;
} catch (e) {
switch (e.message) {
// 토큰에 대한 오류를 판단합니다.
case 'INVALID_TOKEN':
case 'TOKEN_IS_ARRAY':
case 'NO_USER':
throw new HttpException('유효하지 않은 토큰입니다.', 401);
case 'EXPIRED_TOKEN':
throw new HttpException('토큰이 만료되었습니다.', 410);
default:
console.trace(e);
// console.log('광섭짱과 함께하는 코딩공부',)
throw new HttpException('서버 오류입니다.', 500);
}
}
}
}
이부분은 jwt.guard.ts 입니다 저 빨간줄에서
Trace: TypeError: Cannot read properties of undefined (reading 'verify') 이렇게 나오는데 왜 저렇게 나오는건지 도저히 모르겠네요
해당 토큰값도 잘 받아와서 verify 를 이용해 토큰 유효성 검사를 진행하려하는데 그부분에서 에러가 계속 납니다... 도와주세요
2023. 05. 26. 01:57
이건 JwtAuthGuard를 모듈에 연결하지 않았거나, JwtAuthGuard를 쓰는 모듈에서 JwtService를 provider에 넣지 않은 것입니다.