WordPress Nonce не проверяется

У меня есть двухэтапный процесс при входе пользователя с клиентским приложением на сайт WordPress

1-й шаг: клиентское приложение вызывает URL-адрес API сайта WordPress, создает одноразовый номер и возвращает одноразовый токен приложению.

$nonce = wp_create_nonce("my-action");

2-й шаг: клиентское приложение загружает сайт WordPress, используя веб-представление с GET-запросом, включая одноразовый номер в параметре GET. Затем проверяет одноразовый номер.

 wp_verify_nonce( $_GET['token'], 'my-action' );

Я смоделировал это с помощью Postman и настольного браузера. Но одноразовый номер не может быть проверен. Это всегда терпит неудачу.

Это где я создаю nonce

if(username_exists($username)){
$user = get_user_by('login', $username );

$result['status'] = "already_registered";

$token = sha1(date('H:i'));
$result['token'] = $token;

$result['nonce'] = wp_create_nonce("my-action");

return $result;

}

Это где я проверяю nonce …

function userAuth(){

echo $_GET['token'];

$nonce = wp_verify_nonce( $_GET['token'], 'my-action' );

//Do more things based on above verification

}

Есть идеи, что случилось?

1

Решение

У меня была ситуация когда wp_verify_nonce() на моем живом сервере WP сайт никогда не возвращал true. И в то же время копия сайта (идентичный код) на моем сценическом сервере постоянно подтвердила это.

Проблема была на той же странице с формой, включающей одноразовый номер был открыт дважды (в разных окнах Chrome) с одного и того же живого URL сайта. Вторая копия страницы была открыта намного позже первой (скажем, 15 минут спустя). И я забыл о первом открывающемся (который генерировал другой одноразовый номер как связанный с более ранним временем), пытаясь проверить одноразовый одноразовый номер страницы без успеха.

Причина была wp_verify_nonce() как-то сравнил младшую страницу с старшей.

То есть wp_create_nonce()Я повторил на своем бэкэнде, чтобы проверить проблему, дал мне два неидентичных одноразовых номера. Один в скрытом поле формы, которое я отправил через AJAX, и другой в обработчике AJAX моего сервера рядом с wp_verify_nonce() проверить линию. Кратный Ctrl-F5 + открытая сеть Chrome Dev Tools с отключенным кешем не имела никакого эффекта. Одноразовые номера были разные.

Как только я закрыл старую страницу и очистил кеш для новой страницы, одноразовый номер подтвердил значение true.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]