[TIL] 0713 JWT 복고화 &로그인페이지에서 분기점 만들기 #3


작성 시간을 정해두면 좋지 않을까?

목표가 필요하다

육하원칙

 

내가 기억하고 싶은 or  트러블슈팅과 같은 기술적인 부분을 작성하거나

회고 성격의 가벼운 느낌으로 작성해도 괜찮다

 

TIL : 오늘 배운 것 / 느낀 것 / 아쉬웠던 것 -> 보완할 점 / 칭찬 한마디

WIL : 한주 동안 배운 것 / 느낀 것 / 아쉬웠던 것 -> 보완할 점 / 칭찬 한마디 


오늘의 목표

1. 로그인페이지에서 분기점 만들기

  • MBTI가 DB에 없다면 ? MBTI 테스트 페이지로!
  • MBTI가 DB에 있다면 ? 바로 MBTI 결과 페이지로!

2. JWT 토큰 복고화

  • 암호 걸린걸 풀어야 수정을 하지... MBTI 결과 DB에 저장하기

오늘 배운 것

1. 조건문 걸기

  •  열심히 복고화 소스를 알아채고 써먹어서 DB 접근까지 가능해졌다
  • 목표한 분기점을 만들기 위한 조건문 만들기
  • Try ~ except 조건문은 except이 세트로 와야 작동한다는 걸 죽어라 하면서 알게됐다. ( 이게 도대체 왜 if 문과 차이가 있을까 싶었는데 그렇더라. 아 물론 경험한거라서 틀리면 보시는 분 말이 맞음 )
@app.route('/')
def home():
    # 여기는 토큰의 유효기간만 확인
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
    except jwt.ExpiredSignatureError:
        return redirect(url_for("login", msg="로그인 시간이 만료되었습니다."))
    except jwt.exceptions.DecodeError:
        return redirect(url_for("login", msg="로그인 정보가 존재하지 않습니다."))

    # 여기서 MBTI 정보 유무에 따라 result or index 이동 로직
    payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
    user_info = db.users.find_one({"username": payload['id']}, {"_id": False})
    user_mbti = user_info['result_mbti']
    if user_mbti != "":
        return redirect(url_for("result"))
    else:
        return redirect(url_for("index"))

2. JWT 토큰 복고화에 대해서는 이제 쫌 볼 줄 알게 됐다.

  • 복고화 풀 소스는 볼줄 ( != 절대 하드코딩하는게 아니다 ) 알아서, 열심히 복붙해서 DB에 접근할 수 있게 됐다.
  • 파이썬에서 쓰이는 코드이다. 클라이언트가 사방팔방 돌아다닐려면, 자유이용권 = 통행권 = JWT 토큰이 있어야한다.
  • JWT 토큰은 쿠키에 저장하더라
token_receive = request.cookies.get('mytoken')
    payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
    temp_id = payload['id']

    user_info = db.users.find_one({"username": temp_id}, {"_id": False})
로그인 할 때 클라이언트가 서버 응답 받은 후 토큰을 쿠키에 집어 넣음

$.ajax({
            type: "POST",
            url: "/sign_in",
            data: {
                username_give: username,
                password_give: password
            },
            success: function (response) {
                if (response['result'] == 'success') {
                    $.cookie('mytoken', response['token'], {path: '/'});
                    window.location.replace("/")
                } else {
                    alert(response['msg'])
                }
 로그인할 때 서버가 토큰을 만들어서 클라이언트한테 응답한다
 
 if result is not None:
        payload = {
            'id': username_receive,
            'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')

        return jsonify({'result': 'success', 'token': token})
    # 찾지 못하면
    else:
        return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})

 

오늘 느낀 것

1. MBTI 결과값을 DB에 저장할 때

  • 울뻔했다... 나한테는 너무나도 별거 였다.. 왜냐면 이 시점에서 진짜 ㄹㅇ 복붙해서 쓰다가, 이제는 아하~ 하고 이게 필요하겠구나 하고 알고 썼다.

 

아쉬웠던 것

1. 어... 뭔가 

  • 엄청 늘어지게 됐다. 운동을 아침에 가야하는데 자꾸 3일에 한번 주기로 가는 듯하다...