如何在自定义登录表单中阻止特定的用户ID?

时间:2021-02-28 作者:Ari

我已经寻找这个方法好几个星期了,但仍然找不到。有很多网站都在讨论如何创建自定义登录页面,但它们并没有涵盖如何阻止像我所寻找的那样的特定id。

算法如下:

首先,我将确定通过php中的代码阻止的用户id号。

在前端页面上,用户将输入其用户名和密码。然后,当他们单击登录按钮时,wordpress不会立即检查用户用户名和密码之间的兼容性。

Wordpress将首先检查用户输入的用户名id。如果用户名的ID与我阻止的ID相同,则会出现错误消息,用户无法登录,但如果用户名的ID与我阻止的ID不同,则用户可以登录。

我希望你们能帮忙。提前谢谢你

2 个回复
最合适的回答,由SO网友:Rup 整理而成

您可以添加一个低优先级的身份验证挂钩,该挂钩在所有其他挂钩之后运行,并拒绝特定用户ID的身份验证:

function wpse_384212_ban_user_id( $user, $username, $password ) {
    // At this point $user is either a WP_User object if they\'ve successfully logged in,
    // or null or a WP_Error if they haven\'t. We want to reject users by ID.

    if ( $user instanceof WP_User ) {
        // This is a successfully authenticated user. Check their ID.
        $banned_user_ids = array( 3, 6, 10 ); // could also store these in a site option

        if ( in_array( $user->ID, $banned_user_ids ) ) {
            return new WP_Error( \'user_banned\', \'You are banned\' );
        }
    }

    // Else return the user or error from previous authentication filters
    return $user;
}

add_filter( \'authenticate\', \'wpse_384212_ban_user_id\', 999, 3 );
这将拒绝以其他方式成功登录的用户。如果您想拒绝他们,无论他们是否成功登录,您需要查找用户以获取他们的ID以进行额外检查:

function wpse_384212_ban_user_id( $user, $username, $password ) {
    // At this point $user is either a WP_User object if they\'ve successfully logged in,
    // or null or a WP_Error if they haven\'t. We want to reject users by ID.
    $banned_user_ids = array( 3, 6, 10 ); // could also store these in a site option

    if ( $user instanceof WP_User ) {
        // This is a successfully authenticated user. Check their ID.

        if ( in_array( $user->ID, $banned_user_ids ) ) {
            return new WP_Error( \'user_banned\', \'You are banned\' );
        }
    } elseif ($username) {
        // Unsuccessful login but we have a username.
        // Look up the user by username or email to see if they are a banned user
        $login_user = get_user_by( \'login\', $username );
        if ( ! $login_user && is_email( $username ) ) {
            $login_user = get_user_by( \'email\', $username );
        }
        if ( $login_user instanceof WP_User ) {
            // This was a failed login for a valid user. Check the user\'s ID            
            if ( in_array( $login_user->ID, $banned_user_ids ) ) {
                return new WP_Error( \'user_banned\', \'You are banned\' );
            }
        }
    }

    // Else return the user or error from previous authentication filters
    return $user;
}

add_filter( \'authenticate\', \'wpse_384212_ban_user_id\', 999, 3 );
如果这是一个多站点,那么这些将需要一个mu插件。

SO网友:Arnob

有一个简单的插件,你可以用来锁定用户帐户,它是免费的。https://wordpress.org/plugins/lock-user-account/

简直太棒了!

安装并激活插件(从WP Dashboard)导航到用户页面(从WP Dashboard)选择要锁定的特定用户(从“批量操作”下拉列表中选择“锁定”选项即可

enter image description here

enter image description here