내일배움캠프 TIL (221206): 비밀번호와 세션의 암호화

Jiumn·2022년 12월 6일
0
post-thumbnail

오늘 한 일

로그인할 때 세션(session) 값을 저장했다고 생각했는데, console에 찍어봐도 찍히지가 않아서 어디가 잘못됐나 했다.
한참을 찾아보다가 개발자 도구 > application에 cookie 부분에 session 이 잘 저장되어 있는 것을 확인했다!

다음으로 할 일은 비밀번호를 암호화해서 저장하는 것.
flask의 bcrypt 모듈을 사용하면 비밀번호를 암호화해서 저장할 수 있다고 한다.

request.form['data'] 형태로 데이터를 받아서 변수로 저장해준 다음,
비밀번호 부분만 다음 코드로 암호화해주면 된다.

hash_password = bcrypt.hashpw(password, bcrypt.gensalt())

그 다음에는 sql cursor를 열어서 해당하는 컬럼에 대응하는 값들을 넣어주면 된다.

세션 암호화가 필요한 이유

로그인 여부를 구분하기 위해 session을 저장해줘야 하는데, 내가 지금까지 본 대부분의 블로그에서 다음과 같은 키를 입력했다.

app.secret_key = os.urandom(24)

자료를 엄청 찾아보다가 도저히 모르겠어서 수강생분들에게 물어봤지만...
세션 자체는 암호화가 되어 저장되기 때문에 추가로 암호화를 할 필요가 없다 (?)
라는 의견을 들었다. 뭐가 맞는 건지 모르겠다 @_@

TypeError: object of type 'NoneType' has no len()

개발 공부를 하면서 오류 콜렉터라고 해도 될 만큼 하루에도 수십 번 에러를 만나느 것 같다. 매번 다른 에러가 나타나서 당황스럽게 하는데... 언젠가 에러가 한국어로 번역되어 나오길 기대하며...

오늘 만난 에러는 TypeError였다.

TypeError: object of type 'NoneType' has no len()

'None' type 객체에는 len()(문자열의 길이를 재거나, 리스트 요소의 개수를 반환하는 함수)을 쓸 수 없다는 것이었다. 당연하다. None이므로.

이 부분을 어떻게 대체할지 몰라서 하루 종일 머리를 싸매다가 여러 가지 에러를 순회했고... 결론적으론 다음 코드로 해결했다.

if user is not None

생각지도 못한 구문이었다. ㅠㅠ
앞으로 발생하는 에러와 해결 방법을 아카이빙해도 좋을 것 같다.
거의 80% 이상은 에러 해결을 위해 시간을 쓰고 있으니까.

To-do list

  • 로그인 후 페이지 이동 시 사용자 id 인식하도록 jinja2 템플릿 사용해보기
profile
Back-End Wep Developer. 꾸준함이 능력이다.

0개의 댓글