我创建了一个自定义路由来编辑单个用户的元值。这是代码:
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
函数,如果用户是否登录,它只会做一个基本的(布尔)真或假。您可以通过检查功能并验证随机数(如果在标头中传递随机数)来更进一步。
源