https://xetown.com/xepoint/22105

 

위 자료를 이용하려고 하는데 좀 심각? 한 문제가 있습니다.

제작자분께 패치 여부 문의를 드렸지만 무응답이시라 질문을 통해 수정을 하려고 합니다.

사용중이신 분들께서도 이부분은 고려 하시고 사용하셔야 할 듯 합니다.

 

문제는 지정된 기간 동안 인증을 하지 않은 계정을 삭제하는 기능인데요.

여러가지 이유로 인증이 불가능한 회원을 관리자가 제한적으로 승인을 해 주는 경우가 있을 겁니다.

 

그런데 이 경우 메일인증 없이 승인되었기에 이 계정까지 해당 기간에 도달하면 삭제되어 버립니다.

 

활동중인 회원이 삭제되어버리는 것이라 문제가 되겠죠 ??

 

 

 

if($called_position == 'before_module_init')
    {
        if($this->module == 'admin' && $addon_info->activation_hour)
        {
            $args = new stdClass;
            if($addon_info->handling_count)
            {
                $args->list_count = $addon_info->handling_count;
            }
            
            $args->regdate_less = date("YmdHis",strtotime(sprintf('-%d hour',$addon_info->activation_hour)));
            $output = executeQuery('addons.email_activation_limit.getAuthMailLess', $args);
            if($output->data)
            {
                $oMemberController = getController('member');                
                if(!is_array($output->data)) $output->data = array($output->data);
                foreach($output->data as $key=> $val)
                {
                    if($val->member_srl)
                    {
                        $oMemberController->deleteMember($val->member_srl);
                    }
                }
            }        
        }

 

 

 

이 부분에서 회원삭제를 하게 되는 것 같습니다.

 

 

<query id="getAuthMailLess" action="select">
    <tables>
        <table name="member_auth_mail" />
    </tables>
    <columns>
        <column name="member_srl" />
    </columns>
    <conditions>
        <condition operation="less" column="regdate" var="regdate_less" notnull="notnull" />
        <condition operation="equal" column="is_register" default="Y" pipe="and" />
    </conditions>
    <navigation>
        <index var="sort_index" default="regdate" order="desc" />
        <list_count var="list_count" default="10" />
    </navigation>
</query>

 

위 쿼리에서 조건을 하나 더 추가해 주면 될 것 같습니다.  

member 테이블에서 denined이 Y 인 회원인 경우를 추가해 주면 승인된 회원은 빼고 불러올 듯 합니다.

 

 

쿼리에 추가해야할 것 부탁드립니다.

  • profile
    그리고 한가지 추가로 우려스러운 의문점 하나가..
    패스워드 변경이나 메일변경을 위한 메일인증이 요청된 후 인증이 빨리 이루어지지 않을 경우 혹은 인증을 하지 못할 경우 이런 회원도 삭제가 되는건 아닌지 우려가 됩니다.

    이 경우도 이미 승인된 회원을 제외하는 것이 추가 된다면 해결이 될 문제로 보이기도 하구요.
    제가 생각한 우려가 사실이라면 말입니다.
  • profile
    요부분은 제가 이메일변경으로 테스트해 보니 다행히 이 케이스는 is_resiter=N 값을 가지게 되어 삭제대상에 포함되지 않네요.

    관리자 수동승인해준 회원만 구제가 가능하면 될 듯 한데요....
  • ?
    메일인증을 사용한다면 xe_member_auth_mail 테이블에 데이터가 쌓일 겁니다.

    /modules/member/schemas/member_auth_mail.xml 파일을 참고해보세요.
  • ? profile

    제가 궁금한건 메일인증에 관련된건 이 애드온에서 미인증회원번호를 불러오게 되어있습니다.
    그런데 미인증 회원 중 denined이 Y 인 회원만 불러오게 조합을 하고 싶다는 것이구요.

    denined 회원을 확인할 테이블인
    member
    인 듯 합니다.

    제가 본문에 적어 놓은 쿼리에 denined이 Y 인회원을 AND 조건으로 하고 싶다는 거구요.

  • profile ?
    XE에는 메일 인증여부를 영구적으로 저장하는 테이블이 없습니다.
    확장변수나 새로운 테이블에 인증여부를 저장해야 할 겁니다.
  • ? profile
    뭔가 이해를 잘 못하십니다.
    지금 이 애드온의 쿼리를 보시면 메일인증 테이블에서 is_resiter=Y 인 회원을 불러옵니다.
    미인증 회원이죠.

    그런데 제 질문은 이메일미인증 회원인 상태로 있는 회원중에 관리자가 수동으로 상태를 거부 -> 승인으로 바꾸어 놓으 회원이 있다는겁니다.

    이회원을 별도로 빼려면 member 테이블에서 denined이 Y 인 회원만 메일인증 기간 동안 미인증일시 삭제해야 한다는 것이구요.

    지금 애드온의 문제가 메일인증을 하지 않은 회원중에 관리자허가로 활동중인 회원이 섞여 있다는게 문제입니다. 또 패스워드변경 시도나 이메일주소 변경을 시도시 메일인증이 요청될텐데 이부분 마무리 하지 않은 회원도 삭제 된다는 위험이 제 우려입니다.
  • profile ?
    어떤 답변을 원하시는 것인지 잘 모르겠네요.
  • ? profile

    그럼 간략하게 원하는 것을 다시 말씀 드리겠습니다.

    이 애드온의 문제점
    이메일미인증시 회원 자동삭제
    -> 미인증 회원 중 관리자가 허가해서 메일인증 없이 로그인 가능
    -> 이메일미인증 삭제 시 위 허가 회원 같이 삭제.

    원하는 답변
    -> 삭제를 할 회원번로 추출시 member 테이블의 denined이 Y 상태 회원만 뽑아올 수 있도록 이 애드온의 쿼리를 수정요청

  • ?
    근데 혹시 이메일 제공자를 허용하거나 제한하는 기능이 기본적으로 들어있는 건 라이믹스만 그런가요? 회원가입 설정에 보니까 기본적으로 있던데..

    (미인증 회원 삭제는 수동으로 하면 되므로 큰 문제는 아니고)
  • ? profile

    XE에는 따로 없구요. 미인증회원 자동삭제 기능은 이 애드온에 포함된 기능입니다. 제가 사용하고 싶은 기능이 지금 수동으로 하고 있는 것을 자동으로 삭제 하는 것입니다.
    날짜 계산해서 수동으로 삭제해 주는게 귀찮아서요.

    미인증 회원 삭제 수동으로 하면 되므로 큰 문제는 아니고 는 저와 다른 입장이십니다.

  • profile

    member_auth_mail 테이블의 데이터를 가져오면서 member 테이블의 denied 컬럼을 참조하려면 조인이 필요합니다. 테스트는 안해봤지만 대략 아래와 같은 쿼리를 사용하면 될 것 같네요. 만약 에러가 발생한다면 sort_index에 들어가는 값을 확인해 보세요. 조인을 사용할 때는 모든 컬럼을 테이블명.컬럼명 형태로 넣어줘야 합니다.

     

    <query id="getAuthMailLess" action="select">
        <tables>
            <table name="member_auth_mail" />
            <table name="member" />
        </tables>
        <columns>
            <column name="member_auth_mail.member_srl" />
        </columns>
        <conditions>
            <condition operation="less" column="member_auth_mail.regdate" var="regdate_less" notnull="notnull" />
            <condition operation="equal" column="member_auth_mail.is_register" default="Y" pipe="and" />
            <condition operation="equal" column="member_auth_mail.member_srl" default="member.member_srl" pipe="and" />
            <condition operation="equal" column="member.denied" default="Y" pipe="and" />
        </conditions>
        <navigation>
            <index var="sort_index" default="member_auth_mail.regdate" order="desc" />
            <list_count var="list_count" default="10" />
        </navigation>
    </query>

  • profile profile
    포기하고 수동승인 해주는 회원이 생기면 잊지 않고 db에서 인증메일 관련 db를 삭제하려고 했는데 정말 감사합니다.

    다른 자료를 보고 이해를 해보려고 했는데 그냥 봐서는 정확하게 이해가 어렵고 삭제관련이라 섣불리 시도해보기 어려웠습니다.

    도움 감사드립니다.
  • profile profile
    방금 삭제예정인 미승인 회원을 수동으로 승인으로 두어보았다가 모니터링 해보고 다시 거부로 전환하니까 바로 삭제되네요. 이상없이 동작 잘 됩니다! 감사합니다!
  • profile ?
    그렇다면 소스를 어떻게 수정해야 하는건가요?