Существует ли хук перед аутентификацией пользователя?

8 нояб. 2015 г., 21:34:13
Просмотры: 16.4K
Голосов: 8

Я ищу хук, который можно использовать до того, как WP обратится к базе данных для проверки учетных данных пользователя при входе, но не могу его найти. Существует ли такой?

Я пробовал add_filter/action('authenticate', 'customcode', 30, 3), но он срабатывает сразу при запросе страницы wp-login.php, а не после отправки формы входа с логином/паролем методом POST.

0
Все ответы на вопрос 2
1

Если посмотреть код файла wp-login.php, как в случае login, так и в случае по умолчанию выполняется функция wp_signon(). Похоже, причина в том, чтобы обрабатывать случаи, когда у пользователя уже есть валидная cookie для сайта. Поэтому я не думаю, что существует хук, который срабатывает только при входе, но это легко компенсировать. Первый хук на пути входа и перед аутентификацией — это хук действия wp_authenticate, а не authenticate (хотя последний тоже является валидным хуком).

function customcode($username, $password) {
  if (!empty($username) && !empty($password)) {
    // ваш код
  }
}
add_action('wp_authenticate', 'customcode', 30, 2);
8 нояб. 2015 г. 23:11:34
Комментарии

Спасибо. Это тоже вроде работает, за исключением того, что любые ответы, возвращаемые фильтрами authenticate, в конечном итоге переопределяют возвращаемые функцией wp_authenticate, так что это не совсем то, что я искал — просто я неправильно сформулировал вопрос =/

Ken Ken
9 нояб. 2015 г. 12:55:09
2

Ага, оказалось, что add_filter/action('authenticate', 'customcode', 30, 3) — это именно то, что я искал...

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

Таким образом, выполнив дамп global $wp_filter['authenticate'], я увидел следующие фильтры:

20, wp_authenticate_username_password
30, wp_authenticate_cookie
99, wp_authenticate_spam_check

Изменив приоритет на 100 (или выше), я смог переопределить их и создать нужный мне ответ для обработки учетных данных, отправленных через страницу входа.

9 нояб. 2015 г. 12:38:18
Комментарии

Для customcode есть только два аргумента, поэтому должно быть add_action('authenticate', 'customcode', 30, 2). 3 здесь сбивает с толку.

Ion Ion
29 нояб. 2016 г. 15:58:09

authenticate, я считаю, должен быть фильтром, https://codex.wordpress.org/Plugin_API/Filter_Reference/authenticate

Anunay Anunay
25 мар. 2018 г. 17:29:47