>
지난 포스팅에서 회원가입 하고, 비밀번호를 암호화했다.
그리고 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': '아이디/비밀번호가 일치하지 않습니다.'})
특정 등급의 회원만 접근 가능한 페이지를 만들자! (0) | 2024.10.29 |
---|---|
회원 탈퇴 기능을 만들어보자! (0) | 2024.10.29 |
회원 로그인 기능을 만들어보자! (쿠키값 생성 및 유지 - ft. JWT 토큰) (0) | 2024.10.28 |
회원 가입 기능을 만들어보자! (해시 암호화/복호화) (3) | 2024.10.27 |
햄버거 메뉴를 만들자!(반응형) (0) | 2024.10.27 |