我在WordPress中进行AJAX调用以连接API。为此,我试图使用一个随机数,以防止任何未经授权或机器人访问。这是我的代码:
的functions.php
add_action('wp_enqueue_scripts', 'yrc_cst_ajax_platform_script_enqueue');
function yrc_cst_ajax_platform_script_enqueue () {
wp_enqueue_script(
'platform',
get_template_directory_uri(). '/includes/platform.js',
array('jquery'), '1.0', true);
wp_localize_script('platform', 'yrc_cst_platform', array(
'ajax_url' => admin_url('admin-ajax.php'),
'ajax_nonce' => wp_create_nonce('platform_security')
));
}
add_action('wp_ajax_save_platform_contact', 'yrc_cst_save_platform_contact');
在AJAX动作方法中,我写了这个(functions.php):
function yrc_cst_save_platform_contact() {
if ( check_ajax_referer( 'platform_security', $_POST['security'] ) ) {
var_dump($_POST['security']);
}
...
}
这是AJAX电话:
jQuery.ajax({
url: yrc_cst_platform.ajax_url,
type: 'post',
data: {
action: 'save_platform_contact',
security: yrc_cst_platform.ajax_nonce,
contact_email: client_email
},
success: function(response) {
// Doing my stuff...
}
});
在控制台中我看到了这个
无法加载资源。服务器响应状态代码:403 (禁止)/wp-admin/admin-ajax.php
如果我删除了阻止check_ajax_referer(...)
,那么一切正常。一切都在我的本地。我只是以登录用户身份测试周期。
我不知道如何解决它。
答案 0 :(得分:1)
check_ajax_referer的第二个参数用于指定在$ _REQUEST中查找nonce的位置。当你调用check_ajax_referer('platform_security',$ _POST ['security'])时,你基本上告诉函数检查$ _REQUEST [$ _ POST ['security']]。
您应该像这样使用它:
check_ajax_referer( 'platform_security', 'security' )
您可以在此处详细了解:https://codex.wordpress.org/Function_Reference/check_ajax_referer
答案 1 :(得分:0)
尝试使用wp_verify_nonce而不是check_ajax_referer,如下所示:
function yrc_cst_save_platform_contact() {
if ( wp_verify_nonce( $_POST['security'], 'platform_security' ) ) {
var_dump($_POST['security']);
}
...
}