登录时检查用户名或密码是否为空

时间:2018-12-19 作者:Diogo Bento

我正在为客户端构建一个自定义登录页面,并希望为站点管理员保留wp登录页面。

为了检查空字段,我使用以下代码:

function verify_user_pass($user, $username, $password) {
    $login_page  = home_url(\'/login/\');
    if($username == "" || $password == "") {
        wp_redirect($login_page . "?login=empty");
        exit;
    }
}
add_filter(\'authenticate\', \'verify_user_pass\', 1, 3);
但这会干扰wp登录,因为它会提前检查并在登录到wp登录页面后立即重定向到“客户端登录页面”。

有没有其他方法可以检查不影响wp登录的空字段?

非常感谢。

1 个回复
SO网友:butlerblog

部分问题是您已将过滤器的优先级设置为“1”,这意味着它将首先运行。自从authenticate 将在任何登录(wp-login.php或前端登录页)上运行,您可能需要首先将其设置为默认值(10)。否则,它只会劫持您的wp登录。php。

因为您不需要在wp登录时执行此操作。php,您还可以检查以确保在运行自定义验证时该页面不是当前页面。我在你的函数中检查了全局“pagenow”不是“wp login”。php’。

function verify_user_pass( $user, $username, $password ) {
    if ( $GLOBALS[\'pagenow\'] != \'wp-login.php\' ) {
        $login_page  = home_url( \'login/\' );
        if ( "" == $username || "" == $password ) {
            wp_redirect( add_query_arg( \'login\', \'empty\', $login_page ) );
            exit();
        }
    }

    return $user;
}
add_filter( \'authenticate\', \'verify_user_pass\', 10, 3 );
我还改变了其他一些事情:

  • home_url() Slug不需要一个前导斜杠-它会自动将其放入"" == $username) - 这是一个很好的习惯,因为它会捕获类型/语法错误(例如,如果键入错误)=“而不是”==)使用add_query_arg() 将查询参数添加到URL。这样,即使URL中有其他查询参数,也可以正确添加它authenticate 这就是$user 对象(也可能包含WP_Error 对象)。如果在最后不返回此内容,则会破坏自定义进程之外的任何内容,该自定义进程也会运行此过滤器(即主wp login.php)