gpt4 book ai didi

ajax - check_ajax_referer() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 07:20:38 25 4
gpt4 key购买 nike

Smart Wordpress people say插件开发人员应该在从页面发送回 wordpress 博客 (admin-ajax.php) 的每个 AJAX 请求中使用随机数。

这是通过(1)在服务器端生成一个随机数来完成的,通过

$nonce = wp_create_nonce  ('my-nonce');

...(2) 使该 nonce 可用于发送 AJAX 请求的 Javascript 代码。例如,你可以这样做:
function myplg_emit_scriptblock() {
$nonce = wp_create_nonce('myplg-nonce');
echo "<script type='text/javascript'>\n" .
" var WpPlgSettings = {\n" .
" ajaxurl : '" . admin_url( 'admin-ajax.php' ) . "',\n" .
" nonce : '" . $nonce . "'\n" .
" };\n" .
"</script>\n";
}
add_action('wp_print_scripts','myplg_emit_scriptblock');

...然后 (3) javascript ajax 逻辑引用该全局变量。
    var url = WpPlgSettings.ajaxurl +
"?action=my-wp-plg-action&" +
"nonce=" + WpPlgSettings .nonce +
"docid=" + id;

$.ajax({type: "GET",
url: url,
headers : { "Accept" : 'application/json' },
dataType: "json",
cache: false,
error: function (xhr, textStatus, errorThrown) {
...
},
success: function (data, textStatus, xhr) {
...
}
});

...最后(4)在服务器端逻辑中检查接收到的随机数。
add_action( 'wp_ajax_nopriv_skydrv-hotlink', 'myplg_handle_ajax_request' );
add_action( 'wp_ajax_skydrv-hotlink', 'myplg_handle_ajax_request' );
function myplg_handle_ajax_request() {
check_ajax_referer( 'myplg-nonce', 'nonce' ); // <<=-----
if (isset($_GET['docid'])) {
$docid = $_GET['docid'];
$response = myplg_generate_the_response($docid);
header( "Content-Type: application/json" );
echo json_encode( $response ) ;
}
else {
$response = array("error" => "you must specify a docid parameter.");
echo json_encode( $response ) ;
}

exit;
}

但支票究竟是如何运作的呢?

最佳答案

Revising some AJAX procedures ,我遇到了同样的问题。检查 function code 很简单。 :

function check_ajax_referer( $action = -1, $query_arg = false, $die = true ) {
if ( $query_arg )
$nonce = $_REQUEST[$query_arg];
else
$nonce = isset($_REQUEST['_ajax_nonce']) ? $_REQUEST['_ajax_nonce'] : $_REQUEST['_wpnonce'];

$result = wp_verify_nonce( $nonce, $action );

if ( $die && false == $result ) {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
wp_die( -1 );
else
die( '-1' );
}

do_action('check_ajax_referer', $action, $result);

return $result;
}

wp_verify_noncefalse而你还没有发送 false$die参数,然后它会执行 wp_die( -1 ); .

在您的示例代码中, check_ajax_referer()将中断执行并返回 -1到 AJAX 调用。如果要自己处理错误,加参数 $die$do_check 做你的事:
$do_check = check_ajax_referer( 'myplg-nonce', 'nonce', false ); 

请注意,在 WordPress 中处理 AJAX 的正确方法是: register , enqueuelocalize使用 wp_enqueue_scripts 的 JavaScript 文件而不是 wp_print_scripts .
Use wp_enqueue_scripts() not wp_print_styles() .

关于ajax - check_ajax_referer() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com