>

상세 컨텐츠

본문 제목

비밀번호 변경 기능을 만들어보자! (ft. JWT 암호화/복호화)

7. 봉드로이드_개발공부

by 마켓플레이어, 마케터 봉 2024. 10. 28. 18:58

본문

지난 포스팅에서 회원가입 하고, 비밀번호를 암호화했다.

그리고 JWT토큰을 활용해 쿠키값에 저장하고, 로그인을 유지하는 기능을 만들었다.

https://marketerbong.tistory.com/90

https://marketerbong.tistory.com/91

 

아래 이미지와 같이 마이페이지를 만들어, 닉네임, 이메일 정보를 불러오는 건 너무나 쉽다.

mytoken을 가져와서 정보를 확인 한 다음, 닉네임과 이메일을 find_one 해주면 된다.

아래 파이썬 코드를 참고하자.

@bp.route("/") 		
def main():
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        userinfo = db.user.find_one({'email': payload['email']}, {'_id': 0})
        user_email = userinfo['email']
    except:
        return redirect(url_for('login.loginCall'))
    return render_template("user_page.html", user_email = user_email)

 

그럼 아래와 같이 뜬다.

 

비밀번호 변경도 쉬운데, 우선 아래와 같이 화면을 만들었다.

 

그리고 아래 파이썬 코드를 참고하자.

pw1 은 기존 비밀번호이고, pw2는 변경할 비밀번호이다.

비밀번호를 가져와 해시암호화 해준 다음, id를 기준으로 해당 유저를 찾고, 변경한 비밀번호로 변경(update_one)해주면 된다.

비밀번호를 변경했어도 로그인은 유지가 되어야 하니까, jwt토큰을 만들어 다시 발급해줬다.

# 비밀번호 변경
@bp.route('/api', methods=['POST'])
def api_change_pw():
    email_receive = request.form['email_give']
    pw1_receive = request.form['pw1_give']
    pw2_receive = request.form['pw2_give']

    # 회원가입 때와 같은 방법으로 pw를 암호화합니다.
    pw1_hash = hashlib.sha256(pw1_receive.encode('utf-8')).hexdigest()
    pw2_hash = hashlib.sha256(pw2_receive.encode('utf-8')).hexdigest()

    # id를 가지고 해당 유저를 찾아 변경한 비밀번호로 변경합니다.
    result = db.user.update_one({'email': email_receive}, {'$set': {'password': pw2_hash}})

    # 찾으면 JWT 토큰을 만들어 발급합니다.
    if result is not None:
        # JWT 토큰 생성
        payload = {
            'email': email_receive,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=100)
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')

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

 

 

관련글 더보기