항해99 7기/TIL(Today I Learned)

항해99 7기 1일차 TIL[Python .decode('utf-8') 문제]

고을마을 2022. 5. 9. 23:39

2022년 5월 9일

새로운 꿈을 찾아 첫 발걸음을 뗀 오늘.

오늘은 항해99에 승선한 날이다.

 

항해99 1주차에는 웹개발미니프로젝트를 진행한다.

 

팀원들과 논의 끝에 책 리뷰 싸이트를 만들게 됐다.

내가 담당하게 될 기능은 로그인과 회원가입기능이다.

항해99에 시작하기 앞서서 수강했던 웹개발 종합반에선 로그인, 회원가입 기능을 다루지 않았기에 새로운 것에 도전해 보고 싶었다. 

 

수많은 시행착오를 예상하고 있었지만 

초반 와이어프레임을 만들때부터 Figma라는 큰 산이 기다리고 있었고

github를 다루는 것도 익숙치 않아 실수를 하게 됐다. 

이는 추후 WIL에 다루도록 하고 로그인 기능을 코딩하며 겪었던 문제에 대해서 다루고자 한다.

 

.decode('utf-8') 문제

로그인 하면서 토큰을 클라이언트에게 넘겨줄때 .decode('utf-8')까지 작성해서 넘겨주었다.

.decode('utf-8) 까지 넘겨주면서 로그인 버튼을 눌러도 메인화면으로 넘어가지 않는 현상이 발생했다.

코딩하면서 겪는 첫 오류라 멘붕에 빠졌지만 구글링으로 해결!

 

if result is not None:                                                   
    payload = {
        'id2': id_receive,
        'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)      
    }
    token = jwt.encode(payload, SECRET_KEY,algorithm='HS256')          
    return jsonify({'result': 'success', 'token': token})
    # 찾지 못하면,
else:
    return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})

위와 같이 .decode('utf-8')을 지워주면 해결할수있는 문제였다.

 

패키지 pyjwt 2.0.0 이전 버전에서는 jwt.encode()함수의 리턴값이 '바이트 문자열'이라는 자료형이었기 때문에 뒤에 .decode('utf-8')를 붙여 일반 문자열로 바꿔주었다.

그러나 2.0.0 버전부터는 이 함수의 리턴값이 일반 문자열이 되었고 여기에 또 .decode('utf-8')를 붙여주게 되면 에러가 나타나게 된다는 걸 알게된 오늘! 

 

오늘은 팀원들과 주제를 정하고, 와이어 프레임 구현, API설계, 깃허브 조율 등으로 많은 강의를 수강하지는 못했다. 내일부터는 오전부터 강의를 수강하면서 로그인기능을 완성시켜봐야겠다.

 

월요일부터 목요일까지의 웹개발미니프로젝트 개발. 

많은 것을 얻어갈 수 있었으면...

2일차도 화이팅하자!