web-dev-qa-db-ja.com

wp_verify_nonceが機能しない

私はAjaxリクエストに取り組んでいます、私は私のfunctions.phpにいくつかのAjaxリクエストがあります。そして、すべてがうまくいっていますが、これは:

私のPHPでは、私はこれを持っています:

add_action("wp_ajax_fb_points", "get_fb_points");
add_action("wp_ajax_nopriv_fb_points", "get_fb_points");

function get_fb_points(){
    if ( !wp_verify_nonce($_REQUEST['nonce'], 'fb_points_nonce')) {
        exit('No naughty business');
    }
    echo 'yeah';
    die();
}

Footer.phpに私はこれを持っています:

FB.Event.subscribe('Edge.create',
    function(response) {
        if(response == '<?php echo get_facebook_profile('link'); ?>') {
            $.ajax({
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                data: { action: 'fb_points', challenge : 2, nonce : '<?php echo wp_create_nonce('fb_points_nonce'); ?>' },
                async: false,
                success: function(data){
                    console.log(data);
                }
            });
        }
    }
);

しかし、なぜそれがうまく機能していないのか私にはわかりませんが、リクエストの応答が「ノービジネス」ではありません。誰が私が何が悪いのかを見つけるのを手伝ってくれる?

1
jepser

チケットをトラックに提出しただけではわかりません。私はget_current_user_id()を使っていました、そしてそれはwp_create_nonceの振る舞いを変更します。

Sinces wp_create_noncewp_get_current_user()を使っています私は問題があると思います。

3
jepser

Ajaxを使ってデータを渡すときは、wp_verify_nonceの代わりに check_ajax_referer を使うのが好きです。

B.Event.subscribe('Edge.create',
    function(response) {
        if(response == '<?php echo get_facebook_profile('link'); ?>') {
            $.ajax({
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                data: { action: 'fb_points', challenge : 2, _ajax_nonce : '<?php echo wp_create_nonce('fb_points_nonce'); ?>' },
                async: false,
                success: function(data){
                    console.log(data);
                }
            });
        }
    }
);

function get_fb_points(){
    check_ajax_referer( 'fb_points_nonce');
    echo 'yeah';
    die();
}

あなたは$ _POSTの代わりに$ _REQUESTを使っているので、あなたの方法はうまくいかないと思います。

function get_fb_points(){
    $nonce = $_POST['nonce'];
    if ( !wp_verify_nonce( $nonce, 'fb_points_nonce')) {
        exit('No naughty business');
    }
    echo 'yeah';
    die();
}
0
Chris_O