Не могу получить подтверждение wordpress Ajax nonce для работы - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь разобраться, используя nonce на AJAX запросах в WordPress. Я собрал тестовый пост с выпадающим меню c, в котором приведены некоторые данные о выбранном пользователе с помощью ajax (это работает). Проблема в том, что проверка одноразового номера не срабатывает. Я прочитал несколько хороших постов здесь и в другом месте по одноразовым номерам и wp, но не могу заставить это работать.

Я использую ajaxSetup, чтобы получить одноразовый номер в заголовке, а затем добавить одноразовый номер в массив данных в вызове $ ajax:

jQuery(document).ready(function($){
    $.ajaxSetup({headers: {'csrf-token': nonce}});
    var nonce = $('meta[name="csrf-token"]').attr('content');
   var ajax_url = "<?= admin_url('admin-ajax.php'); ?>";
  var data = {
   'action': 'users_details',
   'request': 1,
   'nonce': nonce
  };
  console.log(data);

  $.ajax({
    url: ajax_url,
    type: 'post',
    data: data,
    dataType: 'json',

    success: function(response){
      $('#sel_users').empty();
      $('#sel_users').append("<option value='0'>-- Select user --</option>");
      var len = response.length;
      for(var i=0; i<len; i++){
        var id = response[i].id;
        var username = response[i].username;

        // Add option
        var option = "<option value='"+id+"'>" + username + "</option>";
        $("#sel_users").append(option);
      }
    }
  });

  $('#sel_users').change(function(){
    var id = $(this).val();
        //$.ajaxSetup({headers: {'X-CSRF-TOKEN': nonce}});
    var nonce = $('meta[name="csrf-token"]').attr('content');
    var data = {
     'action': 'users_details',
     'request': 2,
     'nonce': nonce,
     'userid': id
        };
    $.ajax({
      url: ajax_url,
      type: 'post',
      data: data,
      dataType: 'json',
      success: function(response){

        var len = response.length;
        if(len > 0){
          $('#userDetails').show();

          $('#span_name').text(response[0].name);
          $('#span_username').text(response[0].username);
          $('#span_email').text(response[0].email);
        }else{
          $('#userDetails').hide();
        }
      }
    });
  });
});

Я добавил функция для создания одноразового номера для functions.php.

function add_general_nonce()
{
    $nonce = wp_create_nonce( 'ABC' );
    echo "<meta name='csrf-token' content='$nonce'>";
}
add_action( 'wp_head', 'add_general_nonce' );

Добавлена ​​функция проверки одноразового номера для functions.php

    if ( !wp_verify_nonce( $nonce, 'ABC' ) ) {
        die();
    }

Наконец, я добавил действие для вызова функция, которая проверяет одноразовый номер в admin-ajax.php.

function my_action() {
    verify_general_nonce();

}
add_action( 'wp_ajax_my_action', 'my_action' );

Проблема: пользовательские данные могут быть получены независимо от того, являются ли одноразовые номера (AB C) одинаковыми или разными. Очевидно, что где-то функция проверки либо не вызывается, либо не функционирует так, как должна. Есть идеи?

Большое спасибо !!

...