카테고리 없음
Guard Token값에 문자열이 같이 출력된 경우.
두캔두잇
2024. 5. 12. 20:01
[문제 정의]
로그인을 시도 하고 헤더에 토큰값을 전달하여, 해당하는 가드에 설정한 권한을 테스트하려는데 오류가 발생.
다시 로그인을 하여 토큰 값을 전달 했는데 계속 권한이 없다는 오류가 발생했음.
[원인추론]
가드에서는 payload가 string타입 일 때 오류를 반환하기로 되어있어서 우선 payload값을 콘솔찍어봄
const payload = this.jwtService.verify(accessToken);
console.log('payload', payload);
if (typeof payload === 'string') throw new UnauthorizedException('권한이 없습니다. 다시 한번 확인해주세요.');
// 터미널 : payload invalid token
토큰이 유효하지 않다고 나와서 accessToken을 다시 확인해봄. 그 결과 Bearer 라는 문자열이 함께 전달되어 오류발생.
const accessToken = req.headers.authorization;
console.log('accessToken', accessToken);
if (!accessToken) throw new UnauthorizedException('비회원은 이용하실 수 없는 서비스입니다.');
// 터미널 : accessToken 'Bearer 토큰 값'
[시도]
[시도]
accessToken의 값을 다시 변경하여 저장하려고 let 으로 바꾼 뒤 split 메서드를 사용함
let accessToken = req.headers.authorization;
console.log('accessToken', accessToken);
if (!accessToken) throw new UnauthorizedException('비회원은 이용하실 수 없는 서비스입니다.');
accessToken = accessToken.split(' ')[1];
// 터미널 : accessToken '토큰 값'
[결과]
해당 로직이 정상 작동하였으며 payload의 값도 잘 출력되었다. 이 오류를 접하면서 느꼈던건 내가 했던 걸 믿으면서 왜 안되지 하면서 근본적인 문제를 찾지 않고 어렵게 생각했던 것 같다. 오류가 발생하는 시점부터 그 전까지 하나하나씩 콘솔을 찍어보며 확인을 했으면 시간을 아끼며 작업했을 것 같다.