在 WordPress 中为 API 身份验证创建自定义登录功能

Create a custom login functionality in WordPress for API authentication

我正在尝试在 WordPress 中创建自定义登录功能。我需要的是不使用 wp_users table 中的默认 user_pass 字段,而是想使用 wp_usermeta table 中的自定义用户元值。我知道 WordPress 中有一个 authenticate 过滤器钩子,可用于编写自定义身份验证函数。问题是我需要的身份验证是针对 WordPress APIs 的。我将使用另一个应用程序使用 API 访问 WordPress。因此,在用户通过身份验证后,他可以 create/edit/delete 发帖。有一个名为 WP OAuth Server 的插件可用于 API 身份验证。但这使用客户端 ID 或 username/password 进行身份验证。有没有办法在这个插件上使用过滤器挂钩?或者创建自定义函数以通过 APIs?

对用户进行身份验证

我可以通过使用插件 JWT Authentication for WP REST API 来实现它。该插件支持使用用户名和密码对 WordPress API 进行身份验证。所以我使用 authenticate 过滤器来使用我自己的自定义登录功能。

function custom_auth_signon($user, $username, $password) {
    global $wpdb;
    $user_details = get_user_by('login', $username);

    $query = $wpdb->prepare("SELECT user_id FROM {$wpdb->prefix}usermeta WHERE user_id = " . $user_details->data->ID . " AND meta_key = 'custom_password' AND meta_value = %s", $password);
    $result = $wpdb->get_results($query);
    if ($result[0]->user_id) {
        return $user_details;
    } else {
        return NULL;
    }

}

add_filter('authenticate', 'custom_auth_signon', 30, 3);