언제든 문제가 생길 수 있다.
5분전에 멀쩡하던 코드가 갑자기 아무 이유없이 박살나는 곳이
개발 세계 인것 같다.
분명 로컬환경에서 멀쩡하던 파일이 왜 웹에 업로드 되자마자 문제를 일으키는지….
토큰값이 encoding & decoding 되는 과정에서 UTF-8 과 HS256 과정에서 문제가 발생 한 것 같다.
@app.route('/login')
def home():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
## 토큰 존재시 > index 없으면 > login으로 ##
user_info = db.user.find_one({"id": payload['id']})
return render_template('index.html', nickname=user_info["nick"])
except jwt.ExpiredSignatureError:
return redirect(url_for("login", msg="로그인 시간이 만료되었습니다."))
except jwt.exceptions.DecodeError:
return redirect(url_for("login", msg="로그인 정보가 존재하지 않습니다."))
@app.route('/index/login')
def login():
msg = request.args.get("msg")
return render_template('login.html', msg=msg)
@app.route('/index/login', methods=['POST'])
def index_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.user.find_one({'id': id_receive, 'pw': pw_hash})
if result is not None:
payload = {
'id': id_receive,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return jsonify({'result': 'success', 'token': token})
else:
return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
@app.route('/index/register',
def index_register():
id_receive = request.form['id_give']
pw_receive = request.form['pw_give']
nickname_receive = request.form['nickname_give']
pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
db.user.insert_one(
{'id': id_receive, 'pw': pw_hash, 'nick': nickname_receive})
return jsonify({'result': 'success'})