web-dev-qa-db-ja.com

AJAX check_ajax_referer()によるnonce

私はAJAXを使ってWP_nonceフィールドを検証するためにcheck_ajax_referer()を使いたいです。ここに私のhtml要素があります。

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

JQueryを使って入力フィールドから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'
});

Handle-login.phpでは、次のことをやってみます。

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

しかし、その見返りに私は何もしないでしょう..誰かが何が起きているか知っていますか?

3
ronnyrr

あなたがあなたのadd_action('wp_ajax_my_function','whatever_callback');について言及していないので間違いがどこにあるのかを確実に言うのは難しいので、あなたはそれを見逃したと思います。しかし、あなたの質問はこの点で情報が不足しています。

これは私がこれについて得る方法です:

Functions.phpファイルなどで。

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

確認してください あなたのhandle-login.phpファイルがあなたのプラグインやテーマ(functions.phpなど)からメインのphpファイルで宣言されている

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

あなたはあなたのjsファイルフックの直後にnonce変数とajax URLを宣言するべきです、あなたはこれらの後にアクセスすることができるでしょう:

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

あなたのhandle-login.phpファイルで:

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

あなたの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
});

}

お役に立てれば。

5
db306

私は同じ問題を抱えていて、他の関連するajax関数を使って解決した。

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

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

正常に動作し、true/falseを返すようです。どちらかの方がより安全かどうかについて、私はこの情報を見つけました:

wp_verify_nonce対check_admin_referer

1
gtamborero