是否可以在wp_authate_user中检查密码是否正确?

时间:2019-09-06 作者:Best Dev Tutorials

我真的想在wp登录页面上实现Google的CaptchaV3。我在不同的地方看到过几次引用这个片段。问题是,似乎没有人提到如何检查“//FIXME”部分:如果您的密码不正确,此部分将触发……在返回此错误之前,请检查密码是否不正确……”

是否可以使用ajax检查用户的密码是否正确?

这将是WP开发的巨大资产。

  /**
    * These Functions Add and Verify the Invisible Google reCAPTCHA on Login
    */

    add_action(\'login_enqueue_scripts\', \'login_recaptcha_script\');

    function login_recaptcha_script() {

    wp_register_script(\'recaptcha_login\', \'https://www.google.com/recaptcha/api.js\');

    wp_enqueue_script(\'recaptcha_login\')

    }



    add_action( \'login_form\', \'display_recaptcha_on_login\' );

    function display_recaptcha_on_login() {

    echo "<script>
    function onSubmit(token) {
    document.getElementById(\'loginform\').submit();
    }
    </script>
    <button class=\'g-recaptcha\' data-sitekey=\'YOUR_PUBLIC_KEY\' data-callback=\'onSubmit\' data-size=\'invisible\' style=\'display:none;\'>Submit</button>";

    }



    add_filter(\'wp_authenticate_user\', \'verify_recaptcha_on_login\', 10, 2);

    function verify_recaptcha_on_login($user, $password) {

    if (isset($_POST[\'g-recaptcha-response\'])) {

    $response = wp_remote_get( \'https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET_KEY&response=\' . $_POST[\'g-recaptcha-response\'] );

    $response = json_decode($response[\'body\'], true);

    if (true == $response[\'success\']) {

    return $user;

    } else {

    // FIXME: This one fires if your password is incorrect... Check if password was incorrect before returning this error...

    // return new WP_Error( \'Captcha Invalid\', __(\'<strong>ERROR</strong>: You are a bot\') );

    }

    } else {

    return new WP_Error( \'Captcha Invalid\', __(\'<strong>ERROR</strong>: You are a bot. If not then enable JavaScript.\') );

    }

    }

1 个回复
SO网友:Antti Koskinen

我认为没有必要在里面检查密码wp_authenticate_user 过滤,因为检查是作为内部的下一步完成的wp_authenticate_email_password(), 定义过滤器的位置。你可以在wp-includes/user.php#L168.

过滤器参数$user 要么是WP_UserWP_Error 这取决于是否可以使用登录时使用的用户名找到用户。过滤器后有一个if ( is_wp_error( $user ) ) 检查,如果通过,后面会有一个if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) 检查如果此检查失败,则该用户名的密码是错误的,否则给定的用户名和密码是正确的。

相关推荐

将联系人表单7上的reCaptcha右对齐

我正在运行一个wordpress网站,联系方式为7。我已经注册了reCaptcha,除了表单上的所有字段都是右对齐的,但reCaptcha是左对齐的之外,其他一切都很正常。是否可以像其他字段一样将其向右对齐?这是我本地机器的屏幕截图: