首页 > 解决方案 > WordPress 自定义登录要求和使用身份验证挂钩的错误消息

问题描述

出于安全原因,我希望来自某个域的每个用户(现在我使用@company.com)都被强制使用使用 Google 登录按钮登录,所以我写了这个检查。

哪个工作正常,但登录页面上的错误消息没有改变,它说FOUT: Verkeerde logingegevens.which is Dutch for ERROR: Wrong credentials.. 我确实返回了一个带有不同消息的新错误,那么我将如何显示此消息?

function check_login($user, $username, $password) {
    if (!empty($username)) {
        if (substr($user->user_email, -12) == "@company.com") {
            $user = new WP_Error( 'authentication_failed', __( '<strong>ERROR</strong>: Please login using Google.' ) );
        }
    }

    return $user;
}

add_filter('authenticate', 'check_login', 100, 3);

标签: wordpress

解决方案


WordPress 核心

您的问题来自$user您正在过滤的变量已经是 aWP_Error而不是 a的事实WP_User,因此您的过滤器无法工作,因为$user->user_emailis null,希望 Wordpress 在其登录功能中使用另一个中间挂钩

您应该改用此过滤器wp_authenticate_user,它将在从数据库中检索到用户之后但在检查密码之前触发,将用户转换为 WP_Error

function check_login($user) {
    if ($user instanceof WP_User) {
        if (substr($user->user_email, -12) == "@company.com") {
            $user = new WP_Error( 'authentication_failed', __( '<strong>ERROR</strong>: Please login using Google.' ) );
        }
    }

    return $user;
}

add_filter('wp_authenticate_user', 'check_login', 9, 1);

第三方插件

如果您使用的是安全插件,他们通常有一个禁用错误登录消息的选项,这里是如何在一些主要的禁用它

主题安全

该插件提供的一个选项是隐藏所有登录错误消息,您可以在插件的设置> Wordpress Tweaks > 取消选中登录错误消息中禁用此功能 主题安全选项

或通过将此网址附加到您的网站来访问此页面/wp-admin/admin.php?page=itsec&module=wordpress-tweaks&module_type=recommended

文字围栏

此插件为用户提供通用错误消息,以防止泄露密码或用户名是否不正确,您可以在此处禁用此选项 在此处输入图像描述


推荐阅读