inflearn logo
강의

講義

知識共有

Slackクローンコーディング[バックエンド with NestJS + TypeORM]

제로초님 질문드리고싶습니다. 이런문제는 왜발생한건지 파일 캡쳐합니다 도저히 이해가 안돼네요 undefined property verify

1125

kimssun

投稿した質問数 9

0

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 를 이용해 토큰 유효성 검사를 진행하려하는데 그부분에서 에러가 계속 납니다... 도와주세요

nodejs express NestJS TypeORM

回答 3

0

soonswan

혹시 해당 문제 해결되었을까요?.?

0

zerocho

이건 JwtAuthGuard를 모듈에 연결하지 않았거나, JwtAuthGuard를 쓰는 모듈에서 JwtService를 provider에 넣지 않은 것입니다.

0

kimssun

0

kimssun

현재 이렇게 Authmodule쪽을 쓰고 있습니다..

0

zerocho

https://stackoverflow.com/a/68938087

이런 식으로 해보세요.

0

zerocho

모듈에서 jwtService 주입 안하신 것 같은데요?? provider나 모듈에서요.

0

kimssun

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') {
canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest();

const { authorization } = request.headers;
const jwt = JwtService;
console.log(jwt);
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;
}

async validateToken(token: string) {
const secretKey = process.env.SECRET ? process.env.SECRET : 'dev';

try {
console.log(123);
console.log(token);
console.log(123);
console.log(secretKey);
console.log(123);
const jwt = new JwtService();
console.log(jwt);
const verify = jwt.verify(token, { secret: secretKey });
console.log('verify', verify);
return verify;
} catch (e) {
switch (e.message) {
// console.log((e.message).stack);
// 토큰에 대한 오류를 판단합니다.
case 'INVALID_TOKEN':
case 'TOKEN_IS_ARRAY':
case 'NO_USER':
throw new HttpException('유효하지 않은 토큰입니다.', 401);

case 'EXPIRED_TOKEN':
throw new HttpException('토큰이 만료되었습니다.', 410);

default:
console.log((<Error>e).stack, '???');
        throw new HttpException('서버 오류입니다.', 500);
}
}
}
}
제로초님말씀대로 해보았는데도 불구하고 사라지지않아서 위에 콘솔을 찍어보니 constructor 에서 private jwtService
가 아예 undefined더 라구요... 저렇게 말고 할수있는방법이 있을까요.. 자꾸 귀찮게 해서 죄송합니다..

0

zerocho

모듈을 보여주세요~

강의자료는 어디서 다운받나요?

0

110

3

질문 있습니다.

0

294

3

코드 편집기 확장 프로그램

0

209

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

143

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

166

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

151

2

로그인방법이 고민됩니다.

0

190

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

296

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

242

2

npm run db:create 시에 발생하는 decorating 오류

0

231

2

RxJS 디버깅 질문 있습니다.

0

187

3

CacheManager에 대해 질문 있습니다.

0

173

2

로깅은 어떻게 하는게 효율적일까요?

0

222

1

CORS 질문 있습니다.

0

416

2

쿠키 옵션에 대해서 질문 있습니다.

0

184

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

446

1

401 unauthorized문제

0

285

1

가드의 장점에 대해서 질문이 있습니다.

0

225

1

로그 관리에 대해 질문 있습니다.

0

251

2

CORS 에러 질문 있습니다.

0

317

2

배포 환경 DB 연결 질문 있습니다.

0

410

2

socket io 미 연결 문제 (nest & flutter)

1

1150

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

451

1

start:dev-backup으로 돌리면 핫 리로딩이 되요 정상인가요?

0

319

1