[week1] jwt 회원가입/로그인 구현하기 (2)

G-NOTE·2022년 7월 12일
0

항해99

목록 보기
8/36

JWT란?

JWT(JSON Web Token) : JSON 객체를 이용하여 정보를 안전하게 전달하는 웹표준

회원가입 API

@app.route('/api/register', methods=['POST'])
def api_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'})
  • POST 요청으로 받은 id, pw, nickname을 mongoDB에 저장한다.
  • 저장하기 전에 pw를 안전하게 저장하기 위해 sha256 방법(=단방향 암호화. 풀어볼 수 없음)으로 암호화한다.

회원 상태에 맞는 HTML 보여주기

@app.route('/')
def home():
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        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="로그인 정보가 존재하지 않습니다."))
  • jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256']) : 받은 토큰을 SECRET_KEY를 갖고 복호화

cookie란

  • 페이지에 관계없이 브라우저에 임시로 저장되는 정보로 key-value 형태로 저장된다.
    EX. 쿠키로 네이버에서 로그인 유지
  • 쿠키 유지 : 브라우저를 닫으면 자동 삭제되게 하거나, 일정 시간이 지나면 삭제되게 할 수 있다.
profile
FE Developer

0개의 댓글