Je souhaite utiliser check_ajax_referer () pour vérifier un champ WP_nonce avec AJAX. Ici vous pouvez trouver mon élément html.
<input type="hidden" name="login_nonce" value="<?= wp_create_nonce('login_nonce'); ?>"/>
Avec jQuery, j'envoie toutes les valeurs des champs de saisie à une requête 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'
});
Dans handle-login.php, j'essaie de faire ce qui suit:
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
Mais en retour je n’aurai rien .. Quelqu'un sait ce qui se passe?
Difficile de dire avec certitude où est l'erreur, car vous n'avez pas mentionné votre add_action('wp_ajax_my_function','whatever_callback');
qui je pense que vous avez manqué cela. Mais votre question manque d'informations à cet égard.
Voici comment je voudrais en venir à ce sujet:
Dans votre fichier functions.php ou similaire:
add_action(wp_ajax_handle_login, 'handle_login_ajax');
add_action(wp_ajax_nopriv_handle_login, 'handle_login_ajax');
Assurez-vous que votre fichier handle-login.php est déclaré sur votre fichier php principal à partir de votre plugin ou de votre thème, tel que functions.php.
require_once plugin_dir_path(__FILE__) . 'handle-login.php';
Vous devez déclarer les variables nonce et l'URL ajax juste après le hook de votre fichier js. Vous pourrez y accéder après:
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')
) );
Dans votre fichier handle-login.php:
function handle_login_ajax(){
check_ajax_referer('login_nonce', 'security');
$return = array();
echo $return;
wp_die(); // You missed this too
}
Votre fichier 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
});
}
J'espère que cela t'aides.
J’ai eu les mêmes problèmes et j’ai résolu en utilisant une autre fonction ajax associée: changer simplement votre
check_ajax_referer( 'login_nonce', $_POST['security'], false )
à
wp_verify_nonce( $_POST['security'], 'login_nonce' )
semble fonctionner et retourner vrai/faux correctement. Pour savoir si c'est plus sécurisé d'une manière ou d'une autre, j'ai trouvé cette information: