Rhymix & XE

로그인 모달창에서 recaptcha 사용하기

by 카르마 posted Sep 12, 2021
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄

 

https://soonj.net/relfeed/185600

위 포스트에서도 설명했지만 recpatcha를 적용하기 위해서는 로그인 부분에 {$catptcha}를 입력하면 된다고   설명했었습니다,

XETOWN에서 검색해봐도 비슷한 내용밖에 없습니다.

하지만 레이아웃 모달창에서는 동작하지 않습니다.

알고보니  레이아웃에서는 captcha를 동작하지 않더군요.

 trigger를 이용해서 특장 act에서만 동작하게되어있습니다.

 

레이아웃에서는

include_once RX_BASEDIR . 'modules/spamfilter/spamfilter.lib.php';

 

로 spamfilter 라이브러리에 접근이 허용되지 않습니다. 

ㅣ아마도 보안때문에 막아둔 것같습니다.

 

마지막으로 선택한 방법이 아래와 같습니다.

 

해당 레이아웃의 layout.html입니다.

<block cond="!$logged_info">{@
$captcha = getModel('module')->getModuleConfig('spamfilter')->captcha;
if($captcha->type == 'recaptcha' ) $captcha_login_action = $captcha->target_actions['login'];
} </block>

 

 

레이아웃 모달창은 다음과 같이 수정합니다.

<!-- Login widget -->
<section cond="$layout_info->use_login_widget != 'N'"  |cond="($XE_VALIDATOR_ID ?? '') !== 'layouts/soonj.net/layout/1' || !isset($XE_VALIDATOR_MESSAGE)">
<load target="./css/widget.login.css" />
        ...... 중략......
<div >
<input type="password" name="password"  required="required" />
<span ></span>
<span ></span>
<label  for="upw">{$lang->password}</label>
</div>
<div id="recaptcha-instance-1" class="g-recaptcha" cond="$captcha_login_action"></div><!--여기추가-->
</div>
        .... 중략......
</script>
<!--여기부터-->
<block cond="$captcha_login_action">
<script src="https://www.google.com/recaptcha/api.js?render=explicit&onload=reCaptchaCallback" async defer></script>
<div data-sitekey="{$captcha->site_key}" data-theme="{$captcha->theme}" data-size="{$captcha->size}"></div>
<script src="/modules/spamfilter/tpl/js/recaptcha.js"></script>
</block><!--여기까지추가-->
</section>
<!-- /Login widget -->

 

위 소스는 코어에 포함된 XEDTION 레이아웃을 기준으로 설명한 것입니다.

모달창의 패스워드 입력부분 하단에 <div id="recaptcha-instance-1" class="g-recaptcha" cond="$captcha_login_action"></div>를 추가하고 하단에 스크립트를 추가해줍니다.

 

 K-032.png

레이아웃 모달창에도 캡차가 뜹니다.