在 WordPress 插件中将 Nonce 与 Ajax 结合使用

发布于 2024-12-09 15:32:15 字数 1503 浏览 0 评论 0原文

我正在尝试在 WordPress 插件中使用随机数。我有一个表格,我想在上面使用随机数。

在 php 中:

function csf_enqueue() {

//I have other scripts enqueued in htis function 
wp_enqueue_script('my-ajax-handle', plugin_dir_url(__FILE__).'file-path', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'google-maps'));

$data = array(
    'ajax_url' => admin_url( 'admin-ajax.php' ),
    'my_nonce' => wp_create_nonce('myajax-nonce')
);

wp_localize_script('my-ajax-handle', 'the_ajax_script', $data );

}

add_action('wp_enqueue_scripts', 'csf_enqueue');
add_action('wp_ajax_the_ajax_hook', 'the_action_function');
add_action('wp_ajax_nopriv_the_ajax_hook', 'the_action_function');

在 jQuery 文件中:

jQuery.post(the_ajax_script.ajaxurl, {my_nonce : the_ajax_script.my_nonce}, jQuery("#theForm").serialize() + "&maxLat="+ csf_dcscore_crime_map_bounds[0] + "&maxLong="+ csf_dcscore_crime_map_bounds[1] + "&minLat="+ csf_dcscore_crime_map_bounds[2] + "&minLong="+ csf_dcscore_crime_map_bounds[3],
                    function(response_from_the_action_function){
                        jQuery("#response_area").html(response_from_the_action_function);
                    });

我是否在 jQuery 中正确发布了随机数?

在 php 中:

function the_action_function() {
   if( ! wp_verfiy_nonce( $nonce, 'myajax-nonce')) die ('Busted!');
//function continues

有什么建议吗?如果我删除所有有关随机数的代码,一切都会正常。关于它为什么不起作用的任何想法?或者我该如何调试它?谢谢你!

谢谢。

I'm trying to use a nonce in a WordPress plugin. I've got a form that I want use the nonce on.

In php:

function csf_enqueue() {

//I have other scripts enqueued in htis function 
wp_enqueue_script('my-ajax-handle', plugin_dir_url(__FILE__).'file-path', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'google-maps'));

$data = array(
    'ajax_url' => admin_url( 'admin-ajax.php' ),
    'my_nonce' => wp_create_nonce('myajax-nonce')
);

wp_localize_script('my-ajax-handle', 'the_ajax_script', $data );

}

add_action('wp_enqueue_scripts', 'csf_enqueue');
add_action('wp_ajax_the_ajax_hook', 'the_action_function');
add_action('wp_ajax_nopriv_the_ajax_hook', 'the_action_function');

In the jQuery file:

jQuery.post(the_ajax_script.ajaxurl, {my_nonce : the_ajax_script.my_nonce}, jQuery("#theForm").serialize() + "&maxLat="+ csf_dcscore_crime_map_bounds[0] + "&maxLong="+ csf_dcscore_crime_map_bounds[1] + "&minLat="+ csf_dcscore_crime_map_bounds[2] + "&minLong="+ csf_dcscore_crime_map_bounds[3],
                    function(response_from_the_action_function){
                        jQuery("#response_area").html(response_from_the_action_function);
                    });

Am I posting the nonce correctly in the jQuery?

In php:

function the_action_function() {
   if( ! wp_verfiy_nonce( $nonce, 'myajax-nonce')) die ('Busted!');
//function continues

Any suggestions? If I strip out all the code regarding the nonce, everything works fine. Any ideas as to why it's not working? Or how can I debug it? Thank you!

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

满天都是小星星 2024-12-16 15:32:15

有两件事是错误的。

通过jQuery post方法发送数据,你不能像你所做的那样发送一个对象+一个查询字符串。相反,您需要发送查询字符串格式或对象格式数据。为了方便您的情况,我将使用查询字符串格式。所以邮政代码应该如下所示 这

jQuery.post( the_ajax_script.ajaxurl, 
             jQuery("#theForm").serialize() + 
                    "&maxLat="+ csf_dcscore_crime_map_bounds[0] + 
                    "&maxLong="+ csf_dcscore_crime_map_bounds[1] + 
                    "&minLat="+ csf_dcscore_crime_map_bounds[2] + 
                    "&minLong="+ csf_dcscore_crime_map_bounds[3] +
                    "&my_nonce="+ the_ajax_script.my_nonce,
             function(response_from_the_action_function) {
                 jQuery("#response_area")
                     .html(response_from_the_action_function);
             });

将在参数 my_nonce 中发送随机数。现在服务器端您可以替换

if( ! wp_verify_nonce( $nonce, 'myajax-nonce')) die ('Busted!');

if( ! wp_verify_nonce( $_POST['my_nonce'],'myajax-nonce')) die ('Busted!');

查看 jQuery.postwp_verfiy_nonce 会更好地帮助你:)

There are two things wrong.

Sending data via jQuery post method, you can not send one object+one query string as you have done. Instead you will need to either send the query string format or the object format data. For ease in your case, I will go with the query string format. so the post code should look like this

jQuery.post( the_ajax_script.ajaxurl, 
             jQuery("#theForm").serialize() + 
                    "&maxLat="+ csf_dcscore_crime_map_bounds[0] + 
                    "&maxLong="+ csf_dcscore_crime_map_bounds[1] + 
                    "&minLat="+ csf_dcscore_crime_map_bounds[2] + 
                    "&minLong="+ csf_dcscore_crime_map_bounds[3] +
                    "&my_nonce="+ the_ajax_script.my_nonce,
             function(response_from_the_action_function) {
                 jQuery("#response_area")
                     .html(response_from_the_action_function);
             });

That will send the nonce in the parameter my_nonce. Now server side you can replace

if( ! wp_verify_nonce( $nonce, 'myajax-nonce')) die ('Busted!');

with

if( ! wp_verify_nonce( $_POST['my_nonce'],'myajax-nonce')) die ('Busted!');

A look at the documentation of jQuery.post and wp_verfiy_nonce will help you better :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文