Team1-TU-tech / login

0 stars 1 forks source link

회원정보 수정 시 비밀번호 암호화 문제 #31

Open oddsummer56 opened 1 month ago

oddsummer56 commented 1 month ago

image

어떠한 방식으로 비밀번호가 변경되더라도 (이메일 임시 비밀번호 발급 / 회원 정보 수정) DB에 INSERT될 때 해시화 하는 과정을 거쳐야 복호화 될 때 문제 없이 로그인이 되는 것을 확인함.

문제상황: 이메일로 임시 비밀번호를 발급 받아 로그인 후, 회원 정보 수정에서 비밀번호를 수정하려는 상황. 다음과 같이 해시화 하지 않고 수정하면 복호화 과정이 제대로 실행되지 않아 로그인 실패.

수정 전 코드


def patch_data():
    url = f'http://localhost:8888/login/{user_id}'  # 본인의 URL로 수정
    headers = {'Content-Type': 'application/json'}
    params = {"firstname":user_firstname, "lastname":user_lastname,"id":user_id, "passwd":user_passwd, "email":user_email,  "gender":user_gender, "birthday":user_birthday, "phonenumber":user_phonenumber}

수정 후 코드


import bcrypt

# 비밀번호 해시화 함수
def hash_password(password):
    # bcrypt 해시 생성
    hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
    return hashed.decode('utf-8')  # 문자열로 변환 후 반환

def patch_data():
    hashed_password = hash_password(user_passwd)  # 입력받은 비밀번호를 해시화

    url = f'http://localhost:8888/login/{user_id}'  # 본인의 URL로 수정
    headers = {'Content-Type': 'application/json'}
    params = {"firstname":user_firstname, "lastname":user_lastname,"id":user_id, "passwd":hashed_password, "email":user_email,  "gender":user_gender, "birthday":user_birthday, "phonenumber":user_phonenumber}
oddsummer56 commented 1 month ago

DB에 비밀번호 넣을때 해시화

# 비밀번호 해시화 함수
def hash_password(password):
    # bcrypt 해시 생성
    hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
    return hashed.decode('utf-8')  # 문자열로 변환 후 반환

hashed_password = hash_password(user_passwd)  # 입력받은 비밀번호를 해시화
params = {"passwd": hashed_password} # 해시화 된 비밀번호 INSERT

DB에서 비밀번호 읽어올 때 복호화

#비밀번호 검증 함수
def check_password(passwd, hashed):
    return bcrypt.checkpw(passwd.encode(), hashed.encode())