카테고리 없음

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의 값도 잘 출력되었다. 이 오류를 접하면서 느꼈던건 내가 했던 걸 믿으면서 왜 안되지 하면서 근본적인 문제를 찾지 않고 어렵게 생각했던 것 같다. 오류가 발생하는 시점부터 그 전까지 하나하나씩 콘솔을 찍어보며 확인을 했으면 시간을 아끼며 작업했을 것 같다.