我正在尝试将ReCaptcha添加到我的登录页面。我知道每个请求有很多插件,但我不能使用插件。到目前为止还不错,我可以将验证码添加到我的登录中,但无法显示错误。
当我输入错误的密码时,它会在我身上出错,但如果我输入了正确的密码而没有输入验证码,我就不会出错(我应该会得到一个验证码未填充的错误)。所以我唯一的时间captcha_errors 当用户名/密码错误时触发函数。
在检查登录凭据之前,如何让我的登录表单检查ReCaptcha?
do_action(\'login_head\');
// this function adds captcha to the login form
function addCaptcha() {
if( session_id() == "" )
@session_start();
if (isset( $_SESSION["recaptcha_response_field"] ))
unset( $_SESSION["recaptcha_response_field"] );
?>
<p class="cptch_block">
<div id="cap"></div>
<script type=\'text/javascript\' src=\'http://www.google.com/recaptcha/api/js/recaptcha_ajax.js\'></script>
<script type=\'text/javascript\'>
Recaptcha.create("pubk", "cap", {theme:"clean", callback: Recaptcha.focus_response_field});
</script>
<noscript>
<iframe src=\'http://www.google.com/recaptcha/api/noscript?k=pubk\' height=\'300\' width=\'500\'></iframe>
<br />
<textarea name=\'recaptcha_challenge_field\' rows=\'3\' cols=\'40\'></textarea>
<input type=\'hidden\' value=\'manual_challenge\' name=\'recaptcha_response_field\'/>
</noscript>
</p>
<br />
<?php
return true;
}
function verifyCaptcha($pageid) {
$result = false;
if( session_id() == "" )
@session_start();
$pvk = \'prvk\';
if (!empty($pvk) && isset($_POST[\'recaptcha_response_field\'])) {
if(!function_exists(\'recaptcha_check_answer\')) {
require_once \'recaptchalib.php\';
}
$resp = recaptcha_check_answer($pvk, $_SERVER[\'REMOTE_ADDR\'], $_POST[\'recaptcha_challenge_field\'], $_POST[\'recaptcha_response_field\']);
$result = $resp->is_valid;
}
if(!$result)
return $_SERVER["REQUEST_URI"];
else
return admin_url();
}
// this function checks captcha posted with a login
function captcha_errors( $errors ) {
if ( isset( $_SESSION[\'cptch_error\'] ) )
unset( $_SESSION[\'cptch_error\'] );
// return $errros.\'<strong>TEST</strong>\';
if ("" == $_REQUEST[\'recaptcha_response_field\'] ) {
return $errors.\'<strong>\'. __( \'ERROR\', \'captcha\' ) .\'</strong>: \'. __( \'Please fill out The Cpatcha.\', \'captcha\' );
}
if ( isset( $_REQUEST[\'recaptcha_response_field\'] ) && verifyCaptcha()) {
// captcha was matched
} else {
return $errors.\'<strong>\'. __( \'ERROR\', \'captcha\' ) .\'</strong>: \'. __( \'Please enter a valid CAPTCHA value.\', \'captcha\' );
}
return( $errors );
}
add_action( \'login_form\', \'addCaptcha\' );
add_filter( \'login_redirect\', \'verifyCaptcha\', 10, 3 );
add_filter( \'login_errors\', captcha_errors);