我创建了一个自定义路由来编辑单个用户元值。这是代码:
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请求?
答案 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)来进一步了解。