Front-end відновлення пароля у Wordpress

Приступаємо до заключної роботи циклу статей присвяченому роботі з користувачами у фронт-енді сайтів на WordPress. У ній робитимемо механізм відновлення забутого пароля. Отже алгоритм такий: користувач вводить у форму відновлення пароля свій логін або email -> ми форму аяксом у потрібний обробник -> перевіряємо існування користувача з такими даними, запускаємо механізм відновлення та відправляємо йому листа з унікальним посиланням -> при переході за посиланням ми перевіряємо передані дані і якщо всі ок показуємо форму зі зміною пароля -> після відправки форми перевіряємо все ще раз і якщо все змінюємо пароль. Лет'с гоу.

1. Додаємо хуки в route.php

На цей раз ми додамо відразу 2 хуки: перший - обробка запиту на відновлення пароль, другий - обробка самої зміни пароля. Так само відразу створимо потрібні два обробники:/ваш_шаблон/for_users/lost_password.php та/ваш_шаблон/for_users/reset_password.php

Назва функціїreset_password зарезервована ядром WP тому назвемо своюreset_password_front.

2. Створюємо форму для запиту скидання пароля

Як звичайно, я засунув цей код у кастомний шаблон і вибрав його біля звичайної сторінки. Сто перший раз повторю, що форма вирушає аяксом обробником — докладніше тут.

3. Обробка запиту на скидання пароля

Це файл /ваш_шаблон/for_users/lost_password.php

Зверніть увагу, що механізм запису хеша змінився - з версії 4.3 до нього приклеюється ще і time (). Тепер, якщо все пройшло ок, користувачеві відправився лист із посиланням на скидання пароля,/reset-password/ — це url сторінки, до якої я підключив шаблон форми скидання пароля, ви можете зробити інший урл( див. слід пункт).

4. Створюємо форму скиданняпароля

4. Створюємо обробку скидання пароля

Після надсилання форми з попереднього пункти дані будуть оброблені в цьому файлі. (/ваш_шаблон/for_users/reset_password.php)

Ось і все поки що цикл завершено. Можливо, пізніше код буде доповнюватися.

Не забуваємо лайкати і нишпорити, ще ставте запитання.

Цикл статей по роботі з користувачами у фронт-енді сайтів на WordPress:

Вітання! Скажи, будь ласка, а чи є можливість захистити таку форму відновлення, входу та реєстрації на сайті? Поставив собі на сайт, все працює чудово, але як з брутом боротися? Адже все робиться динамічно. Не можу розуму докласти, як захиститись. Хотілося б банити по IP відразу після 3-5раз/год запитів відновлення/невірному паролі/реєстрації і т.д.

Капчу використовувати не варіант.

Привіт, методи захисту є звичайно, перше це поле з сіллю - nonce, воно дозволяє обробляти запити тільки зі сторінки згенерованої вашим вп, бан по IP теж можна прикрутити, але треба продумати чо куди плюс, я думаю, в вп вже має бути стандартний механізм захисту від брут/ддосів, постараюся у вихідні вивчити питання. А чому капча не варіант?

Взагалі погуглил я варіанти, все зводиться до створення додаткової таблиці, яка б запам'ятовувала ip/логін і кількість невдалих спроб, і функції яка б цю таблицю перевіряла. По суті, всі ці функції вже написані в тих численних плагінах, типу wp-limit-login-attempts, думаю можна встановити такий плагін і використовувати функцію перевірки у вашому коді. На жаль зараз писати мою власну велосипедну функцію для цього дуже сильно ліньки, може як небудь у кращі часи доповню.