web-dev-qa-db-ja.com

それが一回だけ一致するときwp_verify_nonceはサーバで本当を戻しません

$.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 request nonceをローカルでチェックすることは完全に機能します。以下に見られるように、私のコンソールは私の一回だけ、「素晴らしい」、そして「成功」を表示します。

9a91a5fdca
Awesome
success

私のサーバーでは、私のコンソールは私の一度だけ二倍を印刷し(それで私に彼らが全く同じであることを証明する)、それから成功します。

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();
}
1
zack

wp_verify_nonce()の2番目のパラメータはアクションです。その部分はあなたの質問にはありませんが、私はそれが以下のように呼ばれるべきであると思います:

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

そのはず、

 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();
}
0
Saiful Islam

アクションはあなたが送ったものと同じではありませんか?

    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') ){
      ....
0
giacoder