묻고답하기
비번저장 해시방식 변경에 따른 부작용 - 회원탈퇴시 비번틀림 문의
2015.01.31 23:56
오늘 비번 저장하는 해시 방식을 변경하였습니다.
변경내용1.
$useSha1 = true;
하는 것과 유사하게 $useSha2 = true; 를 추가해서 추가/수정하였습니다.
변경내용2.
member.model.php 파일의
function isValidPassword($hashed_password, $password_text, $member_srl=null) 함수 내용을 수정하여
기 가입자 로그인 -> 기존md5() 비번이 새로운 방식의 해쉬로 처리되어 저장 -> return true; 성공
변경내용3.
신규가입자 및 회원정보 수정시 md5()로 저장되는 문제 있어서
member.controller.php 의 해당부분 각각 수정하여 해결하였습니다.
* 관리자 페이지에서 직접 비번 수정할 때도 md5()로 저장되지만, 일단 그럴 경우가 거의 없으리라 생각하니 일단 PASS 입니다.
여기까지는 아무 문제가 없는데요...
회원탈퇴를 하려고 하니 "잘못된 비밀번호입니다" 창이 뜹니다.
비밀번호를 잘못 입력했을 가능성은 0%입니다.
보니까 member.controller.php의 이 부분에서 에러가 나는 것 같습니다.
629 /** 630 * Membership withdrawal 631 * 632 * @return void|Object (void : success, Object : fail) 633 */ 634 function procMemberLeave() 635 { 636 if(!Context::get('is_logged')) return $this->stop('msg_not_logged'); 637 // Extract the necessary information in advance 638 $password = trim(Context::get('password')); 639 // Get information of logged-in user 640 $logged_info = Context::get('logged_info'); 641 $member_srl = $logged_info->member_srl; 642 // Create a member model object 643 $oMemberModel = getModel('member'); 644 // Get information of member_srl 645 if(!$this->memberInfo->password) 646 { 647 $columnList = array('member_srl', 'password'); 648 $memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList); 649 $this->memberInfo->password = $memberInfo->password; 650 } 651 // Verify the cuttent password 652 if(!$oMemberModel->isValidPassword($this->memberInfo->password, $password)) return new Object(-1, 'invalid_password'); 653 654 $output = $this->deleteMember($member_srl); 655 if(!$output->toBool()) return $output; 656 // Destroy all session information 657 $this->destroySessionInfo(); 658 // Return success message
$password 는 탈퇴 창에 입력한 패스워드이고,
$this->memberInfo->password 는 DB에서 가져온 패스워드이고,
isValidPassword() 함수를 불러서 이 둘을 비교하는 거잖아요?
회원가입시나, 비번변경시처럼 코드 수정이 필요한 부분도 아니고...
로그인 할 때 isValidPassword() 를 불러 통과가 된 것처럼
탈퇴할 때도 같은 함수 부르는 거니까 문제없이 잘 되어야 할 것 같은데...
왜 에러가 나는지 감이 오지 않습니다.
652 if(!$oMemberModel->isValidPassword($this->memberInfo->password, $password,$member_srl)) return new Object(-1, 'invalid_password');