Reputation: 11
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