Я хочу добавить пользовательскую конечную точку API REST в свой проект, и я использую wp_get_current_user
для проверки роли пользователя в качестве проверки прав доступа.
Но wp_get_current_user
всегда возвращает пустого пользователя.
Я добавил CORS и настройки заголовка, но это не помогло.
Я знаю, что мне не хватает чего-то маленького, не знаю, что именно.
Это пользовательская конечная точка и обратный вызов:
public function register() {
add_action('rest_api_init', array($this, 'register_routes'));
}
function register_routes(){
remove_filter( 'rest_pre_serve_request', 'rest_send_cors_headers' );
add_filter( 'rest_pre_serve_request', function( $value ) {
header( 'Access-Control-Allow-Origin: *' );
header( 'Access-Control-Allow-Headers: X-Requested-With' );
header( 'Access-Control-Allow-Methods: GET, POST, DELETE, PUT' );
header( 'Access-Control-Allow-Credentials: true' );
header( 'Access-Control-Expose-Headers: Link', false );
return $value;
} );
$testNamespace = 'fluentlv-plugin/v1/test';// TEST API
register_rest_route( $testNamespace, '/test', array(
array(
'methods' => 'POST',
'callback' => array( $this, 'my_callback' )
)
));
function my_callback($request){
global $current_user;
$user = wp_get_current_user();
$p = $request->get_params();
if ( in_array( 'admin', (array) $user->roles ) ) {
// some code .....
}
return wp_send_json( array(
'user' => $user
), 200 );
}
и JS AJAX вызов:
$('#check_btn').click(()=>{
let apiUrl = fluentData.api_url + 'test/test';
let d = {
id: 245
};
$.ajax({
type: "POST",
url: apiUrl,
data: JSON.stringify(d),
contentType: "application/json; charset=utf-8",
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: "json",
success: function (data, status, jqXHR) {
// login code for success...
},
error: function (jqXHR, status) {
// show error...
}
});
})