Использование Nonce с Ajax в плагине WordPress
Я пытаюсь использовать одноразовый номер в плагине WordPress. У меня есть форма, на которой я хочу использовать одноразовый номер.
В php:
function csf_enqueue() {
//I have other scripts enqueued in htis function
wp_enqueue_script('my-ajax-handle', plugin_dir_url(__FILE__).'file-path', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'google-maps'));
$data = array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'my_nonce' => wp_create_nonce('myajax-nonce')
);
wp_localize_script('my-ajax-handle', 'the_ajax_script', $data );
}
add_action('wp_enqueue_scripts', 'csf_enqueue');
add_action('wp_ajax_the_ajax_hook', 'the_action_function');
add_action('wp_ajax_nopriv_the_ajax_hook', 'the_action_function');
В файле jQuery:
jQuery.post(the_ajax_script.ajaxurl, {my_nonce : the_ajax_script.my_nonce}, jQuery("#theForm").serialize() + "&maxLat="+ csf_dcscore_crime_map_bounds[0] + "&maxLong="+ csf_dcscore_crime_map_bounds[1] + "&minLat="+ csf_dcscore_crime_map_bounds[2] + "&minLong="+ csf_dcscore_crime_map_bounds[3],
function(response_from_the_action_function){
jQuery("#response_area").html(response_from_the_action_function);
});
Правильно ли я размещаю одноразовый номер в jQuery?
В php:
function the_action_function() {
if( ! wp_verfiy_nonce( $nonce, 'myajax-nonce')) die ('Busted!');
//function continues
Какие-либо предложения? Если я удаляю весь код, относящийся к nonce, все работает нормально. Есть идеи, почему это не работает? Или как я могу это отладить? Спасибо!
Спасибо.
1 ответ
Есть две вещи не так.
Отправляя данные с помощью метода jQuery post, вы не можете отправить один объект + одну строку запроса, как вы это сделали. Вместо этого вам нужно будет либо отправить формат строки запроса, либо данные формата объекта. Для простоты в вашем случае я пойду с форматом строки запроса. поэтому почтовый индекс должен выглядеть следующим образом
jQuery.post( the_ajax_script.ajaxurl,
jQuery("#theForm").serialize() +
"&maxLat="+ csf_dcscore_crime_map_bounds[0] +
"&maxLong="+ csf_dcscore_crime_map_bounds[1] +
"&minLat="+ csf_dcscore_crime_map_bounds[2] +
"&minLong="+ csf_dcscore_crime_map_bounds[3] +
"&my_nonce="+ the_ajax_script.my_nonce,
function(response_from_the_action_function) {
jQuery("#response_area")
.html(response_from_the_action_function);
});
Это отправит одноразовый номер в параметре my_nonce. Теперь на стороне сервера вы можете заменить
if( ! wp_verify_nonce( $nonce, 'myajax-nonce')) die ('Busted!');
с
if( ! wp_verify_nonce( $_POST['my_nonce'],'myajax-nonce')) die ('Busted!');
Просмотр документации jQuery.post и wp_verfiy_nonce поможет вам лучше:)