Отправка формы ajax после авторизации WordPress - PullRequest
0 голосов
/ 23 сентября 2018

На сайте разрешены стандартные средства.

Если вы отобразите <? Php echo get_current_user_id ()?> На странице будет выведен авторизованный пользователь (id)

Но если через AJAX:

$.ajax({
    url: url,
    method: 'POST',
    processData: false,
    data : $formInfo.serialize(),
    cache: true,
    xhrFields: {
        withCredentials: true
    },

То, что с сервера возвращает 0, т.е. не авторизовано.Я попытался включить отправку файлов cookie, withCredentials: true, но это не сработало.Как правильно отправить AJAX-запрос от авторизованного клиента

На сервере я создал свой собственный плагин для приема AJAX-запросов.Уже и авторизация, и регистрация работают.

    register_rest_route('wc/v2', 'users/set-info', array(
    'methods' => 'POST',
    'callback' => 'pl_user_endpoint_set_info',
));


function pl_user_endpoint_set_info($request = null) {
$response = array();
$parameters = $request->get_body_params();

$response['response'] = $parameters;
$response['message'] = get_current_user_id();
$response['cookie'] = $_COOKIE;// for test cookie

return new WP_REST_Response($response, 200);

}

Плагин зарегистрирован на действие rest_api_init

add_action('rest_api_init', 'pl_wp_rest_endpoints');

Код отправляется клиенту из формы, но пока параметры не обработаныСначала я узнаю, как это сделать, чтобы сервер понимал, что клиент авторизован.

Ответ от сервера:

введите описание изображения здесь

1 Ответ

0 голосов
/ 27 сентября 2018

Если вы делаете AJAX-запрос, var_dump (wp_get_current_user ()) возвращает пустой массив.Те.нет пользователей.Оказывается, WordPress просто считает такой запрос неконтролируемым, поэтому он требует дополнительной аутентификации.Нашел решение здесь Аутентификация ajax rest .Нужно просто передать в скрипт nonce

В function.php после подключения скрипта:

wp_localize_script('my-script', 'wpApiSettings', array(
        'root' => esc_url_raw(rest_url()),
        'nonce' => wp_create_nonce('wp_rest')
    ));

AJAX-запрос:

$.ajax({
   url: url,
   method: 'POST',
   processData: false,
   data : $formInfo.serialize(),
   beforeSend: function ( xhr ) {
      xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
   },
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...