Я пытаюсь разобраться, используя 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) одинаковыми или разными. Очевидно, что где-то функция проверки либо не вызывается, либо не функционирует так, как должна. Есть идеи?
Большое спасибо !!