Wecode/Session

Session-토큰생성, 암호화 Bcrypt, PyJWT

청렴결백한 만능 재주꾼 2020. 5. 18. 17:54
반응형

백엔드 세션

일단 가상환경설정 해주고 

 

pip freeze해주고

pip install bcrypt PyJWT

해주고 설치해줌. 그리고

 

파이썬 쉘로 가서 실습함

 

bcrypt.hashpw()  # 해쉬화 하겟다. 라는 명령어고 인자를  ('1234', bcrypt.gensalt())을 넣어줌

 

이렇게 치면 인코드가 안되었다고 오류남

 

해쉬하기전에 바이트화 한다음에 넣어주면 됨 

바이트화 어떻게 하는지!

{

b = '1234'

 

bytes('1234','utf-8') 라고 하면 '1234'를 바이트화 해줌.

or

b.encode('utf-8')

 

인코딩하면 바이트되고 디코딩하면 다시 스트링이 됨.

}

 

다시

 

a= bcrypt.hashpw('1234'.encode('utf-8'), bcrypt.gensalt())

로 하면 1234가 해쉬화 된 것이 리턴된다.

결과 :

b'$2b$12$0FaIhjEbmw6WHNaOh3.C5.KnHCtwDetOiZ3MM4kCshuTMryG0ETFS'

-> 실제로 이거는 이진법으로 저장된 것이고 파이썬이 이렇게 편하게 보여주는 것

 

 

a.decode('utf-8') ->>스트링화 시키는 것

결과:

'$2b$12$nK6G1J9a1oYMW/s.GvGYLuPh7SiYFkwVzH9GjkEN/v53bOSLa24tW'

 

 

bcrypt.checkpw('1234'.encode('utf-8'),a)

앞 인자와 뒷인자를 똑같은 과정을 통해서 같은 값인지 확인하는 메소드

결과:

True

 

 

회원가입받을 때 비크립트 암호화 시키고 데이터베이스에 들어갈 때는  CharField이기 때문에 스트링으로 변화시켜서 넣어야한다. 그작업이 디코드이고 그렇게 저장한 다음 다시 들고올 때 바이트화 시켜서한다.

 

 

PyJWT 와 JWT가 있는데 PyJWT를 쓰는 것 추천

 

import JWT

 

두가지의 메소드가 있음

encode

decode

 

JsonWebToken이기 때문에 딕셔너리로 작성

 

기본값이 HS256 이라 안넣어줘도 되지만 

HS512도 있음.

 

a= jwt.encode({'user_id':1}, 'secret', algorithm='HS256')

결과 값:

b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.J_RIIkoOLNXtd5IZcEwaBDGKGA3VnnYmuXnmhsmDEOs'

 

jwt.decode(a, 'secret' ,  algorithm='HS256')     -->> (첫번째 인자에는 토큰)

결과 값:

{'user_id':1}

 

a.decode('utf-8') - 스트링으로 만들기

 

정석으로는 토큰은 헤더에 주던가 쿠키에 넣어버려야함. 하지만 여기서 편의상 바디에 넣음.

 

프론트에게 토큰을 보내줌.

 

로그아웃의 의미 : 토큰을 날림

로그인 만료 : 토큰 저장시간을 정해줘서 정해진 시간뒤에는 날라감.

 

만약 백엔드에서 토큰을 핸들해야하면 토큰을 저장시켜놓아야함. (신경 쓸 필요는 없음)

 

로그인의 문제는 토큰생성만해주고 프론트에서 핸들해야함.

 

회원가입은 bcrypt로 해서 데이터베이스에 저장한다. 

로그인하면 jwt로 토큰 발행해줘야함.

 

 

 

프로젝트할 때 팁

pip freeze > requirements.txt

를 하면 텍스트파일이 생성되고 거기 안에 내 가상환경에 설치되어 있는 패키지들 절보가 들어감

 

그리고

pip install -r requirements.txt

를 하면 저기 텍스트파일 안에 있는 패키지들을 설치해줌.

 

 

fetch? patch ? 가 중요.(나중에 알아봐야지)

CORS 에러가 뜸

 

그래서 잡아줘야됨

pip install django-cors-headers

해주고 settings.py 가서 다 추가해줘야 함.

 

.gitignore

를 하고 파일이름을 적어놓으면 깃에 안올라감.

 

or 

gitignore.io

홈페이지에 가서 하면 안올라가면 좋을 것들 리스트를 만들어줌.

 

 

반응형