백엔드 세션
일단 가상환경설정 해주고
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
홈페이지에 가서 하면 안올라가면 좋을 것들 리스트를 만들어줌.
'Wecode > Session' 카테고리의 다른 글
Session-MySQL 설치 및 연결 / 기본 사용법(MySQL install/connect/ basic command) (0) | 2020.05.19 |
---|---|
Session-프로젝트에 유용한 툴 (0) | 2020.05.19 |
Session-자료구조(Data Structure)-Set, Dictionary, Hash (0) | 2020.05.18 |
Session-인증/인가(Authentication/Authorization) (0) | 2020.05.18 |
Session - HTTP 구조 및 핵심 요소 (0) | 2020.05.13 |