通过AJAX提供随机数不是刷新随机数,返回403错误

时间:2019-02-26 作者:Swen

我遇到了一个问题,nonce变得无效,并且无法刷新到新的nonce。在我的示例中,我有一个Facebook连接按钮和一个Facebook断开连接按钮,每个按钮都有自己的nonce。

一旦按下其中一个按钮,就会发出AJAX调用,而另一个按钮则通过AJAX发送并显示在页面上。

为了举例说明,我们从Facebook连接按钮开始。

<button type="button" id="facebook-connect-button" class="facebook-button" data-nonce="<?php echo wp_create_nonce(\'ns-social-facebook-authentication\'); ?>">
    <?php _e(\'Connect to\', NS_USER_SYSTEM_TEXTDOMAIN); ?> Facebook
</button>
按下此按钮后,将进行AJAX调用,以验证data nonce属性,如下所示:

check_ajax_referer( \'ns-social-facebook-authentication\', \'_nonce\' );
这里没有问题,它工作得很好,我的挂钩函数工作得很好。

此函数运行后,将返回类似于此的Facebook断开连接按钮,并替换原始按钮。

<button type="button" id="facebook-disconnect-button" class="facebook-disconnect-button" data-nonce="<?php echo wp_create_nonce(\'ns-social-facebook-disconnect\'); ?>">
    <?php _e(\'Disconnect from Facebook\', NS_USER_SYSTEM_TEXTDOMAIN); ?>
</button>
按下此按钮后,一切都像以前一样正常,这次,通过AJAX再次调用Facebook连接按钮。现在问题开始了。

这个新返回的按钮包含相同的nonce,该nonce现在无效并返回403错误,因为它以前已经使用过。

It looks like returning the button through AJAX does not refresh the nonce, even though it\'s already been used.

我还尝试在页面上显示两个按钮,并在每次单击按钮时使用AJAX返回一个新的nonce,但它仍然会分别为每个按钮返回相同的nonce。

为什么会发生这种情况?我如何解决此问题?

2 个回复
SO网友:André Kelling

您可以在用户再次切换“连接”按钮后强制重新加载。

当然,它不再是最好的用户体验了,我想它不符合你的计划。

SO网友:Swen

我找到了问题的根源。在我的函数逻辑中,我调用了另一个函数,在其中我重新记录了用户。这导致用户特定的nonce无效。

删除此逻辑后,一切正常!

相关推荐

通过admin-ajax.php阅读帖子

我正在尝试读取通过ajax调用(admin ajax.php)提交的表单POST值。这篇文章已经准备好并提交了。以下是我在子主题中的服务器端操作挂钩functions.phpadd_action(\'save_post\', \'address_save_postdata\',1,1); add_action( \'wp_ajax_wilcity_handle_review_listing\', \'address_save_postdata\' ); add_action( \