오류회고)AttributeError: 'str' object has no attribute 'decode'

jina Seo·2022년 7월 14일
0

왜 안될까

목록 보기
3/3

token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')

최근에 pyjwt 라이브러리가 대대적인 업데이트를 겪으면서 이 코드가 작동하지 않는다고 한다.

원인

기존 버전에서는 jwt.encode()함수의 리턴값이 '바이트 문자열'이라는 자료형이었기 때문에 뒤에 .decode('utf-8')를 붙여 일반 문자열로 바꾸어주었었는데, 2.0.0 버전부터는 이 함수의 리턴값이 일반 문자열이기 때문에 .decode('utf-8')를 붙여주게 되면 문자열에는 이런 메소드가 없으므로 에러가 나게 된다.

해결

  1. pyjwt의 버전을 1.7.1 이하로 낮춰서 재설치하기
    -> 스파르타코딩클럽 q&a에 있던 해결법이었는데 안된다.
  2. .decode('utf-8') 부분을 삭제
    -> 원인이 이미 일반 문자열로 리턴되기때문이라면 .decode('utf-8')를 삭제하면 되지않을까? 싶어서 해봄
    -> 코드가 잘 돌아간다!

추가

배포하면 돌아가지 않고 .decode를 다시 넣어야 돌아간다. 이유는 뭘까...
하/..

profile
운동하는 개발자가 꿈입니다?

0개의 댓글