Я создаю собственную тему Wordpress с формой входа для посетителей моего веб-сайта. В форме есть поле для имени пользователя, пароля, скрытое поле nonce и скрытое поле действия. При отправке форма отправляется в wp-admin/admin-post.php, к которому я подключаю пользовательскую функцию для обработки отправки входа в систему.
Если я просто беру имя пользователя и пароль в пользовательской функции входа в систему и подключаю их к wp_signon(), все работает отлично, и пользователь может войти в систему in. Однако, если я попытаюсь проверить nonce с помощью wp_verify_nonce($nonce,$action), он вернет false. Я создал nonce, используя wp_create_nonce($action). Я проверил, что одноразовый номер, полученный функцией входа в переменную $_POST, совпадает с созданным мной одноразовым номером, а действие, которое я подключаю к функции проверки, также совпадает с действием, которое я подключаю к созданию. функция.
У меня также есть функция выхода из системы, доступ к которой осуществляется посредством запроса на mydomain/wp-admin/admin-post.php?action=action&nonce=nonce. В пользовательской функции выхода из системы, которая обрабатывает этот запрос, я проверяю nonce точно таким же образом, но здесь он работает нормально. Есть ли что-то, что мне нужно сделать по-другому, чтобы создать одноразовые номера, когда пользователь еще не вошел в систему? Я думал, что одноразовый номер основан на хеше идентификатора пользователя и некоторой информации о времени, но поскольку идентификатор пользователя равен 0 (не вошел в систему) как при создании, так и при проверке одноразового номера, я не понимаю, почему это не сработает.
для справки: пользовательская функция входа в мой файл function.php. Оператор echo возвращает правильный одноразовый номер, однако $nonceResult является ложным.
function handle_customer_login() {
$username = $_POST['username'];
$password = $_POST['password'];
$nonce = $_POST['_nonce'];
$nonceResult = wp_verify_nonce($nonce,'customer_login');
if (empty($_POST['_nonce'])) {
echo 'error: ';
var_dump($nonceResult);
die();
} else {
echo 'nonce: '.$_POST['_nonce'];
var_dump($nonceResult);
die();
}
}
add_action('admin_post_customer_login','handle_customer_login');
add_action('admin_post_nopriv_customer_login','handle_customer_login');
Я создаю nonce в строке кода ниже и добавляю $login_nonce в функцию wp_localize_script(), чтобы передать его на яваскрипт. Затем я визуализирую форму входа в систему с помощью javascript, в которой nonce отлично отображается внутри скрытого поля.
$login_nonce = wp_create_nonce('customer_login');
Подробнее здесь: https://stackoverflow.com/questions/554 ... -logged-in
WordPressverify_nonce не работает, когда вы не вошли в систему ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Управляемые исключения в приложении Maui Windows вошли как Coremessagingxp.dll сбои
Anonymous » » в форуме C# - 0 Ответы
- 1 Просмотры
-
Последнее сообщение Anonymous
-