javascript ajax и nonce

Я изо всех сил пытаюсь реализовать nonces через XML-запрос на php-бэкэнд, используя проверку несовместимости WordPress при динамическом создании форм. Я в порядке с формой, построенной версией

wp_nonce_field( 'delete-comment_'.$comment_id ); 

Поэтому я пытаюсь использовать другие параметры nonce при передаче через javascript-локализацию.

 $nonce = wp_create_nonce( 'my-action_'.$post->ID ); 

Затем, чтобы проверить, есть два варианта.

 check_ajax_referer( 'process-comment' ); wp_verify_nonce( $_REQUEST['my_nonce'], 'process-comment'.$comment_id ); 

Оба из которых я, похоже, не в состоянии распознать в валидации. Через почту проходит номер, и я пытался, именовать, а не именовать, и множество других вариантов тоже, но, похоже, не удалось сделать что-то, что должно быть простым. Примеры, приведенные в кодексе, также сильно запутывают.

например: здесь https://codex.wordpress.org/WordPress_Nonces

Может ли кто-нибудь пролить свет на этот неприятный опыт? Большое спасибо

Корневая проблема заключается в том, что ни один из ваших несов

  • Вы создаете nonce для: 'delete-comment_'.$comment_id

  • Затем вы создаете nonce для: 'my-action_'.$post->ID

  • Затем вы проверяете реферер на совершенно другое значение nonce: 'process-comment'

  • Вслед за проверкой проверки самого nonce, используя еще одно уникальное имя nonce: 'process-comment'.$comment_id

Настолько ясно, что ни один из них не соответствует, проверки не совпадают и отклоняют переданное значение nonce.

Когда вы создаете nonce, вы даете ему действие / имя и генерируете из него токен. Затем вы проверяете токен на действие / имя при обработке запроса, чтобы убедиться, что пользователь действительно намеревался выполнить это действие.

например, создать nonce для 'delete-comment_'.$comment_id , который затем можно отправить с помощью запроса на удаление комментария. Затем обработчик может проверить, хотите ли вы удалить этот комментарий. Он не может этого сделать, если действие / имя не совпадает.

Дополнительная заметка об Auth

Nonces – это метод проверки намерения, но они не являются методом аутентификации. Всегда проверяйте, что пользователь вошел в систему, и что пользователь на самом деле способен выполнять то, что вы планировали с помощью функции current_user_can .

Пользователь nonce может сказать вам, что пользователь действительно нажал кнопку «Удалить комментарий», он не говорит вам, разрешено ли им удалять комментарии

Хорошо, поэтому я нашел рабочее решение, которое так же просто, как я думал, весь процесс должен быть. Сбивающий с толку кодекс WordPress сделал все по-настоящему тяжелее.

Создание и присвоение имени nonce так же просто, как:
wp_create_nonce( 'example' );

Это передается через AJAX и локализация скрипта на PHP.

Затем во время проверки $ _POST; все, что необходимо, это передать имя сообщения в качестве второго параметра в функции проверки. например:
check_ajax_referer( 'example', 'nonce')

nonce – это имя идентификатора $ _POST, например:
$_POST['nonce']

Как-то было очень трудно понять это через код и другие примеры, найденные через Интернет. Надеюсь, это объяснение может помочь кому-то, кто борется с кодами и нотками.