WordPressverify_nonce не работает, когда вы не вошли в системуPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 WordPressverify_nonce не работает, когда вы не вошли в систему

Сообщение Anonymous »

Я создаю собственную тему 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»