我正在开发一个插件(这是第一次),我正试图负起责任,在我的Ajax调用中包含一个nonce。我看了十几本教程,都有不同的方法,我想我已经找到了答案,但我无法让它验证nonce。我是否在这个过程中遗漏了一个步骤?
我应该注意到,如果我注释掉check\\u ajax\\u referer,那么其他一切都可以工作,因此函数、javascript对象和其他一切似乎都是正确的。
首先,我生成nonce并将其存储在Javascript对象中:
$fmsapi_ajax_params = array (
\'ajaxurl\' => admin_url(\'admin-ajax.php\'),
\'ajax-nonce\' => wp_create_nonce(\'fmsapi_refresh_nonce\'),
);
wp_register_script("fmsapi_refresh_script", plugins_url(\'fmsapi_refresh_hybrid_schedule.js\', __FILE__), array(\'jquery\'));
wp_localize_script(\'fmsapi_refresh_script\', \'fmsapi_Ajax\', $fmsapi_ajax_params);
接下来,在Javascript中,我在通过Ajax调用传递的数据中包含nonce:
jQuery(document).ready(function ($) {
var data = {
\'action\': \'fmsapi_refresh_hybrid_schedule\',
\'year\': year,
\'event\': event,
\'team\': team,
\'type\': type,
\'security\': fmsapi_Ajax.ajax_nonce,
};
jQuery.post(fmsapi_Ajax.ajaxurl, data, function (response, status) {
document.getElementById("frc_hybrid_table").innerHTML = response;
});
});
最后,在PHP中,我尝试检查nonce:
$security = filter_input(INPUT_POST, \'security\');
check_ajax_referer(\'fmsapi_refresh_nonce\', $security);
// Populate the table with the parameters provided
echo frc_populate_hybrid_schedule($year, $event, $team, $type);
为了简洁起见,我删掉了一些与nonce无关的代码,但根据我的研究,这应该是可行的。
Firefox中的Inspect控制台没有标记任何Javascript错误,我运行的BlackBox插件不会返回任何PHP错误。在创建和检查之间,有一个问题,我似乎找不到。