Как избежать этой проблемы с устареванием WordPress? - PullRequest
0 голосов
/ 31 октября 2019

Допустим, у меня есть плагин WordPress, и в форме я использую wpnonce

<form id="myForm">
<input type="hidden" id="myFormId" name="myFormId" value="<?php echo($myFormId); ?>" />
<div id="myNonceWrapper" style="display:none;">
<?php
  if ( function_exists('wp_nonce_field') ) 
  {
    return wp_nonce_field('my_action' . $myFormId);
  }
?>
</div>

Затем на бэкэнде вы проверяете, что одноразовый номер действителен

$nonce = $_POST["nonce"];
$myFormId = $_POST["myFormId"];
if(!wp_verify_nonce($nonce, $myFormId))
{
  return "nonce error";
}

Но каждые 24 часа срок действия одноразового номера истекает. Так что это означает, что если кто-то загружает страницу, то через 24 часа они вводят информацию в форму и отправляют, форма не будет выполнена.

Это результат того, что срок действия одноразового номера уже истек.

Итак, чтобы избежать этого, нужно ли добавлять какой-то код для обновления одноразового номера каждый раз? Как в конце javascript?

// renew nonce every 10 hours
setInterval(getNewNonceForMyForm(), 1000 * 60 * 60 * 10)

Будет ли проблема с отображением одноразового имени? Например ...

function getNewNonceForMyForm() {
  var myFormId = $["#myFormId"].val();
  var data = {
    action: 'get_new_nonce',
    nonce_name: 'my_form_nonce' + myFormId
  };
  jQuery.post(my_ajax.ajax_url, data, function(response) {
    //response contains the new nonce code from doing wp_nonce_field($nonceName)
    $('#myNonceWrapper').html(response);
  });
}

Что-нибудь, что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...