it-swarm.com.de

AJAX nonce with check_ajax_referer ()

Ich möchte check_ajax_referer () verwenden, um ein WP_nonce-Feld mit AJAX zu überprüfen. Hier finden Sie mein HTML-Element.

<input type="hidden" name="login_nonce" value="<?= wp_create_nonce('login_nonce'); ?>"/>

Mit jQuery sende ich alle Werte aus den Eingabefeldern an eine POST -Anforderung:

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'
});

In handle-login.php versuche ich Folgendes:

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

Aber dafür bekomme ich nichts .. Weiß jemand was los ist?

3
ronnyrr

Schwer mit Sicherheit zu sagen, wo der Fehler liegt, da Sie nicht über Ihre add_action('wp_ajax_my_function','whatever_callback'); gesprochen haben, die Sie meiner Meinung nach verpasst haben. Aber Ihrer Frage fehlen diesbezüglich Angaben.

So würde ich damit umgehen:

In deiner functions.php Datei oder ähnlichem:

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

Stellen Sie sicher, dass Ihre handle-login.php-Datei in Ihrer Haupt-PHP-Datei von Ihrem Plugin oder Theme wie functions.php deklariert ist

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

Sie sollten Nonce-Variablen und die Ajax-URL direkt nach Ihrem JS-Datei-Hook deklarieren. Sie können darauf zugreifen, nachdem:

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')
) );

In deiner handle-login.php Datei:

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

Ihre Javascript-Datei:

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
});

}

Hoffe das hilft.

5
db306

Ich hatte die gleichen Probleme und löste sie mit einer anderen verwandten Ajax-Funktion: Ändern Sie einfach Ihre

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

zu

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

scheint zu funktionieren und richtig wahr/falsch zurückzugeben. Über ob es sicherer ist auf die eine oder andere Weise habe ich diese Info gefunden:

wp_verify_nonce vs check_admin_referer

1
gtamborero