WP REST API 不需要在开机自检时进行身份验证



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

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' );
}

在邮递员上测试它,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函数,如果用户是否登录,它只会做一个基本的(布尔)真或假。您可以通过检查功能并验证随机数(如果在标头中传递随机数)来更进一步。

最新更新