Wordpress Custom REST API аутентификация wp_get_current_user - PullRequest
1 голос
/ 07 февраля 2020

Я хочу добавить пользовательскую конечную точку 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...
      }
  });
  })
...