먼저 회원가입부터 보면
@app.route('/api/sign', methods=["POST"])
def sign_up():
id_receive = request.form['id_give']
pw_receive = request.form['pw_give']
name_receive = request.form['name_give']
nick_receive = request.form['nick_give']
# 비밀번호 암호화
pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
if db.min7_project.find_one({'id': id_receive}) is None:
doc = {
'id': id_receive,
'pw': pw_hash,
'name': name_receive,
'nick': nick_receive
}
db.min7_project.insert_one(doc)
return jsonify({'msg': '가입 완료!'})
else:
return jsonify({'msg': '중복된 아이디 입니다'})
비밀번호를 sha256문자열화 시킨다. sha256은 단방향 암호화로 변형된값으로 원래값을 받아올 수 없다.
@app.route('/api/login', methods=["POST"])
def login():
id_receive = request.form['id_give']
pw_receive = request.form['pw_give']
pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
result = db.min7_project.find_one({'id': id_receive, 'pw': pw_hash})
print(result)
if result is not None:
payload = {
'id': id_receive,
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=5)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return jsonify({'result': 'success', 'token': token})
else:
return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
로그인 코드인데, id와 pw를 받아와서 pw를 암호화하고 비교후, 일치한다면 토큰값을 쥐어준다.
토큰은 안에 id, exp(로그인 유지기간),secret key가 jwt토큰으로 인코드되어 보내진다.
jwt는 양방향 암호화이다.
@app.route('/main')
def show_main():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
user_info = db.min7_project.find_one({"id": payload['id']})
return render_template('index.html', nickname=user_info["nick"], id=payload['id'])
except jwt.ExpiredSignatureError:
return redirect(url_for("login", msg="로그인 시간이 만료되었습니다."))
except jwt.exceptions.DecodeError:
return redirect(url_for("login", msg="로그인 정보가 존재하지 않습니다."))
로그인이 완료되면 /main으로 이동하는데, 토큰을 받아와서 디코드를 하고, 유저 아이디를 확인한이후, 메인페이지와 닉네임, 아이디를 리턴한다. 토큰이 사라질경우는 try except문으로 구현해놓았다.
github 주소:https://github.com/kingscode99/MiniProjectTeam7.git
'개발 공부' 카테고리의 다른 글
내가 보려고 만든 JAVA객체지향 총정리 (0) | 2022.12.15 |
---|---|
None값의 정의 (0) | 2022.12.14 |
파이썬 try except (0) | 2022.12.12 |
항해 99 7조 팀 노션 (0) | 2022.12.10 |
git 협업 명령어 정리(pull, merge) (0) | 2022.12.10 |