AJAX nonce com check_ajax_referer ()

Eu quero usar check_ajax_referer () para verificar um campo WP_nonce usando AJAX. Aqui você pode encontrar o meu elemento html.

<input type="hidden" name="login_nonce" value=""/> 

Usando jQuery estou enviando todos os valores dos campos de input para uma solicitação POST:

 request = $.ajax({ type: 'POST', url: 'handle-login.php', data: { user: $('input[name="login_username"]').val(), pass: $('input[name="login_password"]').val(), security: $('input[name="login_nonce"]').val() }, dataType: 'json' }); 

Em handle-login.php, estou tentando fazer o seguinte:

 require_once $_SERVER['DOCUMENT_ROOT'].'/wp-load.php'; $return = array(); if( check_ajax_referer( 'login_nonce', $_POST['security'], false ) ) $return['nonce'] = $_POST['login_nonce']; echo $return 

Mas, em troca, não recebo nada … Alguém sabe o que está acontecendo?

Solutions Collecting From Web of "AJAX nonce com check_ajax_referer ()"

Difícil de dizer com certeza onde o erro é como você não mencionou sobre o seu add_action('wp_ajax_my_function','whatever_callback'); o que eu acho que você perdeu isso. Mas a sua pergunta falta informação a este respeito.

É assim que eu fico sobre isso:

No arquivo functions.php ou similar:

 add_action(wp_ajax_handle_login, 'handle_login_ajax'); add_action(wp_ajax_nopriv_handle_login, 'handle_login_ajax'); 

Certifique-se de que seu arquivo handle-login.php seja declarado em seu arquivo php principal de seu plugin ou tema, como functions.php

 require_once plugin_dir_path(__FILE__) . 'handle-login.php'; 

Você deve declarar as variables ​​nonce e o URL do ajax logo após o gancho do arquivo js, ​​você poderá acessar estes depois:

 wp_enqueue_script('wccajs',plugin_dir_url( dirname(__FILE__) ) . 'login.js',array('jquery'),'1.0',false); wp_localize_script('wccajs','MyAjax',array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'security' => wp_create_nonce('handle_login') ) ); 

No seu arquivo handle-login.php:

 function handle_login_ajax(){ check_ajax_referer('login_nonce', 'security'); $return = array(); echo $return; wp_die(); // You missed this too } 

Seu arquivo Javascript:

 function send_stuff_to_server(){ var data = { 'action': 'handle_login', // missed this same as your action hook wp_ajax_{handle_login} 'security': MyAjax.security // We can access it this way } $.post(MyAjax.ajax_url, data, function (callBack) { console.log(callBack); // Will return nonce }); } 

Espero que isto ajude.

Eu tenho tido os mesmos problemas e resolvi usando outra function ajax relacionada: apenas mudando sua

check_ajax_referer( 'login_nonce', $_POST['security'], false )

para

 wp_verify_nonce( $_POST['security'], 'login_nonce' ) 

parece funcionar e retornar verdadeiro / falso corretamente. Sobre se é mais seguro de uma maneira ou outra eu encontrei esta informação:

wp_verify_nonce vs check_admin_referer