1. 세팅
- 패키지 설치 : pyJWT
- Template Language : Jija2
2. 기능
- 비밀번호 : 해시함수 사용하여 암호화
pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
- 로그인 : JWT 토큰, 쿠키
3. 로그인 로직
- 로그인 시, 비밀번호를 동일한 방법으로 암호화한 후, DB에서 해당 아이디와 비밀번호를 갖는 회원이 있는지 찾습니다.
# 회원가입 때와 같은 방법으로 pw를 암호화합니다.
pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
# id, 암호화된pw을 가지고 해당 유저를 찾습니다.
result = db.user.find_one({'id': id_receive, 'pw': pw_hash})
- 회원 정보가 없는 경우 실패 메시지를 보내고, 찾은 경우 아이디와 토큰 만료 시간을 저장하는 토큰을 만들어 넘겨줍니다.
if result is not None:
# JWT 토큰에는, payload와 시크릿키가 필요합니다.
# 시크릿키가 있어야 토큰을 디코딩(=풀기) 해서 payload 값을 볼 수 있습니다.
# 아래에선 id와 exp를 담았습니다. 즉, JWT 토큰을 풀면 유저ID 값을 알 수 있습니다.
# exp에는 만료시간을 넣어줍니다. 만료시간이 지나면, 시크릿키로 토큰을 풀 때 만료되었다고 에러가 납니다.
payload = {
'id': id_receive,
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=5)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
# token을 줍니다.
return jsonify({'result': 'success', 'token': token})
# 찾지 못하면
else:
return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
- 로그인 성공 메시지를 받으면 건네받은 토큰을 쿠키로 저장하여 만료되기 전까지 갖고 있으면서, API 요청을 보낼 때마다 회원임을 확인받습니다.
- 로그아웃 시 해당 토큰을 삭제합니다.
4. 코드
- 깃허브 project 4번 참조 : https://github.com/teawan-Noh/sparta-AtoZ
'프로그래밍 > Python' 카테고리의 다른 글
사전 자료형 (0) | 2022.06.05 |
---|---|
리스트 자료형 - 리스트 컨프리헨션 (초기화) (0) | 2022.06.05 |
셀레니움 사용법 (with. python) (0) | 2022.05.02 |
Jinja2 템플릿 언어란? (사용법) (0) | 2022.04.29 |
datetime 함수 (python) - 날짜/시간 (0) | 2022.04.28 |