NONCE在nopriv调用中不生效

时间:2015-04-16 作者:user1049961

我有一个使用Ajax调用的函数:

function bs_reserve_gift()
{
    if (!wp_verify_nonce($_POST[\'_wpnonce\'], \'reserve_gift\')) {
        $response[\'status\'] = \'error\';
        $response[\'message\'] = __(\'Something went wrong, please try again later!\', \'bs\');
        echo json_encode($response);
        exit();

    } else {
        update_post_meta($_POST[\'reserve_gift_id\'], \'gift_status\', \'reserved\');
        $response[\'status\'] = \'success\';
        $response[\'gift_id\'] = $_POST[\'reserve_gift_id\'];
        $response[\'message\'] = __(\'Thank you, the gift was reserved for you!\', \'bs\');
        echo json_encode($response);
        exit();

    }

}

add_action(\'wp_ajax_nopriv_reserve_gift\', \'bs_reserve_gift\');
add_action(\'wp_ajax_reserve_gift\', \'bs_reserve_gift\');
这适用于已登录的用户,但对于未登录的用户,由于某种原因,nonce不会验证。。。

我如何解决这个问题?

1 个回复
最合适的回答,由SO网友:Phil Johnston 整理而成

使用check\\u ajax\\u referer:https://codex.wordpress.org/Function_Reference/check_ajax_referer

//Check nonce
if ( !check_ajax_referer( \'nonce-action-name\', \'_wpnonce\', false ) ){
    echo __(\'Ajax Security Check\', \'yourtextdomain\');
    die();
}

结束

相关推荐

在AJAX中使用ajaxurl传递查询变量的正确方法

好的,我不知道该如何命名这个主题。我试图用ajax覆盖默认行为。这里的问题实际上不是一个问题,而是一个更大的愿望。我有以下url:<a href=\"http://example.com/?reaction=smk_remove_post&id=1226&_nonce=7be82cd4a0\" class=\"smk-remove-post\">Remove post</a> 在functions.php 我有此功能,并在以下时间后立即调用:functio