WP REST API 不需要在 POST 上进行身份验证

WP REST API not required authentication on POST

我创建了一个自定义路由来编辑单个用户元值。这是代码:

add_action( 'rest_api_init', function () {
    register_rest_route( 'custom', '/activating/(?P<id>\d+)', array(
        'methods' => 'POST',
        'callback' => __NAMESPACE__ . '\activate_user',
        'args' => array(
            'id' => array(
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric( $param );
                }
            ),
        ),
    ));
});

function activate_user($data){
    $user_id = $data['id'];
    update_user_meta( $user_id, "user_active", 1, 0 );
    return array( 'message' => 'OK' );
}

正在 Postman 上测试,WP 不需要身份验证。这个是正常的?我需要做什么才能允许 POST 仅通过身份验证请求?

您应该使用 permission_callback 参数来验证用户。

add_action( 'rest_api_init', function () {
    register_rest_route( 'custom', '/activating/(?P<id>\d+)', array(
        'methods' => 'POST',
        'callback' => __NAMESPACE__ . '\activate_user',
        'permission_callback' => 'is_user_logged_in',
        'args' => array(
            'id' => array(
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric( $param );
                }
            ),
        ),
    ));
});

正如您在此处看到的,我传入了 is_user_logged_in 函数,如果用户已登录,该函数将执行基本的 (bool)true 或 false。您可以通过检查功能和验证随机数(如果在 headers 中传递了随机数)来更进一步。

Source