Bruno Bros
Bruno Bros

Reputation: 11

Debug nonce issue with wordpress

I am not able to find out the issue with an autentification with nonce during connection to an endpoint. Here are the file:

Shortcode that send request to endpoint:

<?php
/*
Plugin Name: Test Security
Description: A simple plugin to test nonce verification using a shortcode.
Version: 1.0
Author: Your Name
*/

// Enqueue necessary scripts and generate a nonce
function test_security_enqueue_scripts() {
    wp_enqueue_script('test_security_script', plugin_dir_url(__FILE__) . 'js/test-security.js', array('jquery'), null, true);
    wp_localize_script('test_security_script', 'test_security_ajax_object', array(
        'ajax_url' => 'https://plugin-rss-ai.com/wp-json/aaibp/v1/fetch-test-security', // Change to your endpoint
        'nonce' => wp_create_nonce('wp_rest')
    ));
}
add_action('wp_enqueue_scripts', 'test_security_enqueue_scripts');

// Shortcode function
function test_security_shortcode() {
    ob_start();
    ?>
    <div id="test-security-container"></div>
    <?php
    return ob_get_clean();
}
add_shortcode('test_security', 'test_security_shortcode');

Here is the js:

jQuery(document).ready(function($) {
    console.log("Test Security script loaded.");

    $.ajax({
        url: test_security_ajax_object.ajax_url,
        method: "POST",
        beforeSend: function(xhr) {
            xhr.setRequestHeader('X-WP-Nonce', test_security_ajax_object.nonce);
        },
        data: {},
        success: function(response) {
            console.log("AJAX Success: ", response);
            if (response.success) {
                $("#test-security-container").html("<p>ok</p>");
            } else {
                $("#test-security-container").html("<p>not ok</p>");
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.error("AJAX Error: ", textStatus, errorThrown);
            console.log("Response Text: ", jqXHR.responseText);
            $("#test-security-container").html("<p>not ok</p>");
        }
    });
});

and finaly the endpoint:

add_action('rest_api_init', function () {
    register_rest_route('aaibp/v1', '/fetch-test-security', array(
        'methods' => 'POST',
        'callback' => 'aaibp_fetch_test_security',
        'permission_callback' => function() {
            return true; // Modify this based on your specific permissions
        },
    ));
    register_rest_route('aaibp/v1', '/save-test-security', array(
        'methods' => 'POST',
        'callback' => 'aaibp_save_test_security',
        'permission_callback' => function() {
            return true; // Modify this based on your specific permissions
        },
    ));
});

function aaibp_fetch_test_security(WP_REST_Request $request) {
    $nonce = $request->get_header('X-WP-Nonce');
    if (!wp_verify_nonce($nonce, 'wp_rest')) {
        error_log("Invalid nonce: " . print_r($nonce, true));
        return new WP_REST_Response(array('success' => false, 'message' => 'Invalid nonce', 'nonce' => $nonce), 403);
    }
    return new WP_REST_Response(array('success' => true, 'message' => 'fetch: ok'), 200);
}

function aaibp_save_test_security(WP_REST_Request $request) {
    $nonce = $request->get_header('X-WP-Nonce');
    if (!wp_verify_nonce($nonce, 'wp_rest')) {
        error_log("Invalid nonce: " . print_r($nonce, true));
        return new WP_REST_Response(array('success' => false, 'message' => 'Invalid nonce', 'nonce' => $nonce), 403);
    }
    return new WP_REST_Response(array('success' => true, 'message' => 'save: ok'), 200);
}

Could you help me please

I tried a lot of tests without any result. I expect to correct the nonce settings.

Upvotes: 1

Views: 37

Answers (0)

Related Questions