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 인 회원인 경우를 추가해 주면 승인된 회원은 빼고 불러올 듯 합니다.
쿼리에 추가해야할 것 부탁드립니다.
댓글 14
패스워드 변경이나 메일변경을 위한 메일인증이 요청된 후 인증이 빨리 이루어지지 않을 경우 혹은 인증을 하지 못할 경우 이런 회원도 삭제가 되는건 아닌지 우려가 됩니다.
이 경우도 이미 승인된 회원을 제외하는 것이 추가 된다면 해결이 될 문제로 보이기도 하구요.
제가 생각한 우려가 사실이라면 말입니다.
관리자 수동승인해준 회원만 구제가 가능하면 될 듯 한데요....
/modules/member/schemas/member_auth_mail.xml 파일을 참고해보세요.
제가 궁금한건 메일인증에 관련된건 이 애드온에서 미인증회원번호를 불러오게 되어있습니다.
그런데 미인증 회원 중 denined이 Y 인 회원만 불러오게 조합을 하고 싶다는 것이구요.
denined 회원을 확인할 테이블인
member
인 듯 합니다.
제가 본문에 적어 놓은 쿼리에 denined이 Y 인회원을 AND 조건으로 하고 싶다는 거구요.
확장변수나 새로운 테이블에 인증여부를 저장해야 할 겁니다.
지금 이 애드온의 쿼리를 보시면 메일인증 테이블에서 is_resiter=Y 인 회원을 불러옵니다.
미인증 회원이죠.
그런데 제 질문은 이메일미인증 회원인 상태로 있는 회원중에 관리자가 수동으로 상태를 거부 -> 승인으로 바꾸어 놓으 회원이 있다는겁니다.
이회원을 별도로 빼려면 member 테이블에서 denined이 Y 인 회원만 메일인증 기간 동안 미인증일시 삭제해야 한다는 것이구요.
지금 애드온의 문제가 메일인증을 하지 않은 회원중에 관리자허가로 활동중인 회원이 섞여 있다는게 문제입니다. 또 패스워드변경 시도나 이메일주소 변경을 시도시 메일인증이 요청될텐데 이부분 마무리 하지 않은 회원도 삭제 된다는 위험이 제 우려입니다.
그럼 간략하게 원하는 것을 다시 말씀 드리겠습니다.
이 애드온의 문제점
이메일미인증시 회원 자동삭제
-> 미인증 회원 중 관리자가 허가해서 메일인증 없이 로그인 가능
-> 이메일미인증 삭제 시 위 허가 회원 같이 삭제.
원하는 답변
-> 삭제를 할 회원번로 추출시 member 테이블의 denined이 Y 상태 회원만 뽑아올 수 있도록 이 애드온의 쿼리를 수정요청
(미인증 회원 삭제는 수동으로 하면 되므로 큰 문제는 아니고)
XE에는 따로 없구요. 미인증회원 자동삭제 기능은 이 애드온에 포함된 기능입니다. 제가 사용하고 싶은 기능이 지금 수동으로 하고 있는 것을 자동으로 삭제 하는 것입니다.
날짜 계산해서 수동으로 삭제해 주는게 귀찮아서요.
미인증 회원 삭제 수동으로 하면 되므로 큰 문제는 아니고 는 저와 다른 입장이십니다.
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>
다른 자료를 보고 이해를 해보려고 했는데 그냥 봐서는 정확하게 이해가 어렵고 삭제관련이라 섣불리 시도해보기 어려웠습니다.
도움 감사드립니다.