带有check_ajax_referer()的ajax现时值

时间:2015-12-07 作者:ronnyrr

我想使用check\\u ajax\\u referer()来验证使用ajax的WP\\u nonce字段。在这里可以找到我的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\'
});
在句柄登录中。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 个回复
SO网友:db306

很难说清楚错误在哪里,因为您没有提到add_action(\'wp_ajax_my_function\',\'whatever_callback\');我想你错过了。但你的问题缺少这方面的信息。

这就是我将如何处理这件事:

在您的功能中。php文件或类似文件:

add_action(wp_ajax_handle_login, \'handle_login_ajax\');
add_action(wp_ajax_nopriv_handle_login, \'handle_login_ajax\');
Make sure 您的句柄登录。php文件是从插件或主题(如函数)在主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\')
) );
在您的句柄登录中。php文件:

function handle_login_ajax(){
    check_ajax_referer(\'handle_login\', \'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
});

}
希望这有帮助。

SO网友:gtamborero

我也遇到了同样的问题,我使用另一个相关的ajax功能解决了这些问题:只需更改

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

wp_verify_nonce( $_POST[\'security\'], \'login_nonce\' )
似乎正常工作并正确返回真/假。关于是否以某种方式更安全,我发现了以下信息:

wp_verify_nonce vs check_admin_referer

SO网友:Yosbany Zamora

在方法中check_ajax_referer(), 第二个参数不是nonce值,而是post-request参数的键。

check_ajax_referer( \'login_nonce\', \'security\', false );

相关推荐

如何全局使用wp_LOCALIZE_SCRIPT()AJAX URL

我已将此添加到functions.php 并且需要使用ajaxURL 在模板中的所有排队脚本中(而不是在此处仅将一个脚本排队add_action( \'wp_enqueue_scripts\', \'ajaxify_enqueue_scripts\' ); function ajaxify_enqueue_scripts() { wp_localize_script( \'ajaxify\', \'ajaxURL\', array(\'ajax_url\' => get_tem