Как правильно добавить nonce в запрос на rest маршрут? Маршрут кастомный. Сейчас я сделал так.
1. Добавил nonce и отправляю его вместе с запросом
wp_localize_script( 'app-js', 'app_data', [
'site_url' => get_site_url(),
'my_nonce' => wp_create_nonce('string')
] );
jQuery.ajax({
url: window.app_data.site_url + '/wp-json/my-form/send',
dataType: 'json',
data: {
formData: formData,
my_nonce: window.app_data.my_nonce,
},
method: 'POST',
success: function (data) { },
error: function (data) {}
});
2. В обработчике проверяю nonce и возвращаю ошибку, если что-то не так.
if(!wp_verify_nonce($_POST['my_nonce'], 'string')) {
wp_send_json_error(['message' => 'Unauthorized'], 422);
}
Все это работает нормально, но только для незалогиненых юзеров, после авторизации на сайте возвращается 422.
Этот маршрут должен быть открыт для всех юзеров. Я просто до конца не понял как защищать rest api в wordpress от csrf. Читал, что нужно добавлять nonce в поле wp_rest и тогда WP автоматом проверит юзера, но как я понял, это все нужно для авторизации существующего юзера, а не просто для csrf-защиты.