当WP_VERIFY_NONCE与随机数匹配时,它在服务器上不返回TRUE

时间:2013-04-03 作者:zack

$.ajax({
    type: "POST",
    dataType: "text",
    url: ajaxurl,
    data: {
            action: "more_news",
            nonce: nonce,
            offset: offset
    },
    success : function(data, textStatus, jqXHR){
        console.log( nonce );
        console.log( data );
        console.log( textStatus );
    }
});
在本地检查此AJAX请求非常有效。如下图所示,我的控制台会打印我的nonce,“Awesome”,然后打印“success”。

9a91a5fdca
Awesome
success
在我的服务器上,我的控制台打印两次nonce(从而向我证明它们完全相同),然后成功。

e2ca4eca80
e2ca4eca80
success
至少可以说,我……很困惑。这怎么可能?我该如何解决它?

add_action( \'wp_ajax_more_news\', \'more_news\' );
add_action( \'wp_ajax_nopriv_more_news\', \'more_news\' );

function more_news(){
    if ( !wp_verify_nonce($_POST[\'nonce\'], \'more_news_nonce\') ){
        exit($_POST[\'nonce\']);
    }
    echo \'Awesome\';
    die();
}

3 个回复
SO网友:fuxia

的第二个参数wp_verify_nonce() 就是行动。这部分不在你的问题中,但我想应该这样称呼:

if ( !wp_verify_nonce($_POST[\'nonce\'], $_POST[\'action\']) ){

SO网友:giacoder

动作和你发送的不一样吗?

    data: {
        action: "more_news",
        ...

   function more_news(){
      if ( !wp_verify_nonce($_POST[\'nonce\'], \'more_news_nonce\') ){
      ....
我想应该是吧

   function more_news(){
      if ( !wp_verify_nonce($_POST[\'nonce\'], \'more_news\') ){
      ....

SO网友:Saiful Islam

应该是这样的,

 data: {
        action: "more_news",
        nonce: <?php echo wp_create_nonce( \'saiful_create_nonce\' ); ?>,
        offset: offset
},
和wp功能

function more_news(){
  if ( ! check_ajax_referer( \'saiful_create_nonce\', \'nonce\' ) ){
    return false;
  }
 echo \'Awesome\';
    die();
}

结束