정보찾기 입니다. (재업)

정보찾기 입니다. (재업)

QA

정보찾기 입니다. (재업)

본문

../skin/member/basic/password_lost.php 의 수정된 코드입니다(아래)

 
<form name="fpasswordlost" action="<?php echo $action_url ?>" onsubmit="return fpasswordlost_submit(this);" method="post" autocomplete="off">
////////////////////////추가된 코드////////////////////////
        <div class="px-3 px-sm-0 py-3">
            <p> - 계약시 방번호 와 계약자 성명을 같이 입력하시기 바랍니다.<br>
                - 회원가입 시 등록하신 이메일 주소를 입력해 주세요.<br>
                  해당 <strong>이메일</strong>로 <strong>아이디</strong>와 <strong>비밀번호</strong> 정보를 보내드립니다.</strong>
            </p>
            <label class="sr-only" for="mb_email">이메일<strong class="sr-only"> 필수</strong></label>
            <div class="input-group my-3">            
            <input type="text" name="room_no" id="room_no" required class="form-control required frm_input full_input" size="30" placeholder="방번호(Room No)">
            </div>
 
            <div class="input-group my-3">
            <input type="text" name="user_name" id="user_name" required class="form-control required frm_input full_input" size="30" placeholder="계약자명(User Name)">
            </div>
////////////////////////추가된 코드  END////////////////////////
            <div class="input-group my-3">
                <div class="input-group-prepend">
                    <span class="input-group-text"><i class="fa fa-envelope-o" aria-hidden="true"></i></span>
                </div>
                <input type="text" name="mb_email" id="mb_email" required class="form-control required email" maxlength="100" size="30" placeholder="계약시 등록하신 이메일 ">
                <div class="input-group-append">
                    <button type="submit" id="btn_sumbit" class="btn btn-primary">인증메일 보내기</button>
                </div>
            </div>
            <div class="text-center">
                <?php echo captcha_html(); ?>
            </div>
        </div>
    </form>

이메일 인증함수를 사용 안하고, xml 로 POST 요청후 Response 된 이메일과 사용자가 입력한 이메일 값이 같을 경우만 이메일주소로 비밀번호를 변경할 수 있는 이메일을 보내게 하려합니다.


../skin/member/basic/password_lost2.php 의 코드입니다(아래)

<?php
 
$email = get_email_address(trim($_POST['mb_email']));
 
if (!$email)
    alert_close('메일주소 오류입니다.');
 
$sql = " select count(*) as cnt from {$g5['member_table']} where mb_email = '$email' ";
$row = sql_fetch($sql);
if ($row['cnt'] > 1)
    alert('동일한 메일주소가 2개 이상 존재합니다.\\n\\n관리자에게 문의하여 주십시오.');
 
$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime, mb_leave_date from {$g5['member_table']} where mb_email = '$email' ";
$mb = sql_fetch($sql);
if (empty($mb['mb_id']) || $mb['mb_leave_date']) {
    alert('존재하지 않는 회원입니다.');
} elseif (is_admin($mb['mb_id'])) {
    alert('관리자 아이디는 접근 불가합니다.');
}
?>


위 코드느 DB 에 이메일이 있을 경우 비교해서 참이면 입력한 메일로 비번 임시번호를 보내는 건데,
보안사정상 DB 에 이메일과 휴대전화 를 제거한 상태입니다.
그러나 회원들의 개인정보는 보안 서버에 있는 xml 로 Response 해서 사용자가 입력한 room_no 와 user_name 그리고 이메일 주소를 입력해서 POST  방식인데, Request  를 보시면 아시겠지만,
room_no 와 user_name 을 request 로 보내면 Response 데이터는 이메일주소가 돌아 오는 방식입니다.
돌아온 이메일과  자신이 입력한 이메일이 같으면 그누보드에서 작동하는 이메일로보내는 비밀번호찾기
로직이 작동하게 하고 싶습니다. 

password_lost2.php 의 코드를 대처해서 작동해야 하는데 아무리 뒤져보고 질문을 했지만 감은 오는데 실행 능력이 모자라 이렇게 다시 한 번 질문을 올립니다.

여기저기 물어 보고 ChatGPT BingAI 에게도 질문 하고 해도 전혀...ㅡㅡ;

아래는 현재 까지 수집한 코드입니다.

<?php
// 사용자가 입력한 room_no와 user_name을 가져옵니다.
$roomNo = $_POST['room_no'];
$userName = $_POST['user_name'];
 
// POST 요청을 위한 데이터를 설정합니다.
$requestData = '<?xml version="1.0"?>
                <REQUEST003>                
                <ROOM_NO>' . $roomNo . '</ROOM_NO>
                <user>' . $userName . '</user>
                </REQUEST003>';
 
// 보안 서버의 URL을 설정합니다.
$url = 'http://jdream.winsult.co.kr/xml/request.html';
 
// POST 요청을 보냅니다.
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $requestData,
    CURLOPT_HTTPHEADER => ['Content-Type: text/xml; charset=utf-8'],
]);
$result = curl_exec($ch);
curl_close($ch);
 
// 응답된 데이터를 파싱합니다.
$xml_data = simplexml_load_string($result);
 
// 응답된 데이터에서 이메일 주소를 가져옵니다.
$response_email = (string) $xml_data->USER_INFO->EMAIL;
 
// 사용자가 입력한 이메일 주소를 가져옵니다.
$user_email = $_POST['mb_email'];
 
// 응답된 이메일과 사용자가 입력한 이메일이 같은지 확인합니다.
if ($response_email == $user_email) {
    // 임시비밀번호 발급
$change_password = rand(100000, 999999);
$mb_lost_certify = get_encrypt_string($change_password);
 
// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = md5(pack('V*', rand(), rand(), rand(), rand()));
 
// 임시비밀번호와 난수를 mb_lost_certify 필드에 저장
$sql = " update {$g5['member_table']} set mb_lost_certify = '$mb_nonce $mb_lost_certify' where mb_id = '{$mb['mb_id']}' ";
sql_query($sql);
 
// 인증 링크 생성
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&mb_nonce='.$mb_nonce;
 
$subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다.";
 
$content = "";
 
$content .= '<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">';
$content .= '<div style="border:1px solid #dedede">';
$content .= '<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">';
$content .= '회원정보 찾기 안내';
$content .= '</h1>';
$content .= '<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">';
$content .= '<a href="'.G5_URL.'" target="_blank">'.$config['cf_title'].'</a>';
$content .= '</span>';
$content .= '<p style="margin:20px 0 0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= addslashes($mb['mb_name'])." (".addslashes($mb['mb_nick']).")"." 회원님은 ".G5_TIME_YMDHIS." 에 회원정보 찾기 요청을 하셨습니다.<br>";
$content .= '저희 CLUB 850 에서는 관리자라도 회원님의 비밀번호를 알 수 없기 때문에, 비밀번호를 알려드리는 대신 새로운 비밀번호를 생성하여 안내 해드리고 있습니다.<br>';
$content .= '아래에서 변경될 비밀번호를 확인하신 후, <span style="color:#ff3061"><strong>비밀번호 변경</strong> 링크를 클릭 하십시오.</span><br>';
$content .= '비밀번호가 변경되었다는 인증 메세지가 출력되면, 홈페이지에서 회원아이디와 변경된 비밀번호를 입력하시고 로그인 하십시오.<br>';
$content .= '로그인 후에는 정보수정 메뉴에서 새로운 비밀번호로 변경해 주십시오.';
$content .= '</p>';
$content .= '<p style="margin:0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= '<span style="display:inline-block;width:100px">회원아이디</span> '.$mb['mb_id'].'<br>';
$content .= '<span style="display:inline-block;width:100px">변경될 비밀번호</span> <strong style="color:#ff3061">'.$change_password.'</strong>';
$content .= '</p>';
$content .= '<a href="'.$href.'" target="_blank" style="display:block;padding:30px 0;background:#484848;color:#fff;text-decoration:none;text-align:center">비밀번호 변경</a>';
$content .= '</div>';
$content .= '</div>';
 
mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb['mb_email'], $subject, $content, 1);
 
run_event('password_lost2_after', $mb, $mb_nonce, $mb_lost_certify);
 
alert_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.\\nCLUB 850');
} else {
    // 경고 메시지를 표시합니다.
    alert('입력하신 정보가 올바르지 않습니다.');
}
?>

테스트 결과 '입력하신 정보가 올바르지 않습니다.'  오류납니다.
정확히 받아서 대입해 주었는데 오류 나네요..
혹시 이부분 아시는 분들은 조언을 부탁 드립니다.^^
 

이 질문에 댓글 쓰기 :

답변 1

결국

if ($response_email == $user_email) {

여기가 false 라는 건데, 두개의 값을 찍어서 동일한 값인지 확인해보셨을까요???

네, 일부러 정확한 값을 만들어서 DB에 저장후에 테스트를 하는 중입니다.
그런데, 한결 같이  '입력하신 정보가 올바르지 않습니다.' 라는 경고만 나오고
진행이 안되네요.

네. 답변 주셔서 고맙습니다.^^

너무 늦게 확인해서 죄송해요..

해봤더니...
response_email :  user_email : *** 개인정보보호를 위한 이메일주소 노출방지 ***  요건 나오는데 여기sir 에선 블라인드를 이렇게 하는 군요

이렇게 나옵니다. 문제는 response_email  이 오지 않는 다는 거지요?

말씀 감사합니다. 이렇게 적극적으로 도와 주시는 분은 처음이라 감동 입니다.
문제점이  $response_email 이 호출되지 못해서 이런 문제가 발생 한듯 합니다.
먼저 서버관리자에게 문의를 해보고 안되면 다시 질문 드릴께요.
번거럽게 해 드려서 죄송 합니다.
그리고, 고맙습니다.^^

제가 실수로  <REQUEST>  부분에 <USER_NAME> 라고 입력해야 하는데
전체를 다시 검수를 하다가 보니 <user> 라고 되어 있길래 수정해서 실행해 보니
정상 작동 합니다.^^ 휴~
정말 고맙습니다. 왜 저부분을 놓쳤는지 모르겠네요.
에러가 나면  에러 코드를 분석해야 한다는 선배님들 말씀을 다시 한 번 새기는 시간 입니다.

NDWEB님 끝까지 도와 주셔서 고맙습니다.^^

답변을 작성하시기 전에 로그인 해주세요.
전체 88
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT