我遇到了一个问题,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。
为什么会发生这种情况?我如何解决此问题?