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

时间:2017-11-02 16:44:02

标签: php wordpress wordpress-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' );
}

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

1 个答案:

答案 0 :(得分:1)

您应该使用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。您可以通过检查功能和验证nonce(如果在标头中传递nonce)来进一步了解。

Source