Як реалізувати в PHP відновлення пароля

324

Від автора: один мій товариш, щоб не забути паролі, набиває собі на тіло у вигляді татуювань. З-за збільшення числа акаунтів на різних ресурсах кількість наколок різко зросла. Тепер він подумує про те, як би частина паролів «перенести» на шкіру домашнього кота. Я не прихильник таких «екстремальних заходів», тому пропоную розглянути, як реалізувати в PHP відновлення пароля більш гуманним шляхом.

Способи повернути втрачене

Давайте відразу розберемося, як на ресурсах, написаних на PHP, відбувається ідентифікація і реєстрація. У цьому процесі беруть участь (найчастіше) база даних MySQL і форми HTML. Розглянемо весь процес на прикладі авторизації.

Користувач, щоб зайти в адмінку ресурсу або отримати доступ до певного контенту або функціоналу, вводить в форму авторизації свій пароль та логін. В якості логіна може використовуватися контактну поштову скриньку, вказану під час реєстрації або звичайний нік.

Після натискання на кнопку форми Submit введені дані відправляються на обробку на сервер. Тут код PHP перевіряє правильність пароля і логіна. Якщо вони валідні, то користувач отримує доступ до чогось з перерахованого вище (все залежить від специфіки конкретного ресурсу).

Але зараз розвелося стільки ресурсів, що для збереження паролів до них доведеться покрити наколками всіх членів родини. Ще й сусідам дістанеться Як реалізувати в PHP відновлення пароля . Але ми зупинимося на вивченні більш стандартного способу відновлення пароля на сайті.

Для цього також використовується зв’язка «PHP-БД-форма». У сучасних формах авторизації біля основної кнопки або після неправильного введення пароля виводиться спеціальна посилання, по якому можна перейти на сторінку відновлення втраченого внаслідок «амнезії» пароля.

Як реалізувати в PHP відновлення пароля

Якщо ви використовуєте одну з популярних CMS, написаних на PHP, то вам пощастило. Найчастіше функціонал цих движків включає в себе засоби для повернення забутого пароля, тому «заморочуватися» на написання окремого скрипта вам не доведеться.

Кодуємо для «самопальних» движків

Не всі воліють розгортати свої ресурси на основі «розкручених» CMS. Багато компаній замовляють ексклюзивні рішення з унікальним дизайном і системою. Та й звичайні «юзери» теж не проти найняти фрілансера і отримати хороший движок, безпека і унікальність якого набагато вище популярних розтиражованих рішень. Загалом, постараємося написати скрипт для відновлення паролю PHP самостійно.

Спочатку «набросаєм» легку HTML-структуру спеціальної форми. Я спеціально не буду вказувати стилі для неї, щоб не відволікатися на опис коду CSS:

Сторінка відновлення пароля

Відновлення пароля

Логін

Ось так ця форма виглядає у вікні браузера:

Як реалізувати в PHP відновлення пароля

Як бачите, нічого цікавого. Але вся суть криється в коді PHP. Зверніть увагу, що в атрибуті форми action потрібно підключити файл, що містить у собі програмний код. Тепер перейдемо до його опису.

Код PHP

Перед цим слід створити БД, де будуть зберігатися логіни, паролі та контактна «мило» користувачів. Для цього я використовував оболонку phpMyAdмin. Структура даних таблиці, куди записується вся інформація:

Як реалізувати в PHP відновлення пароля

Частину коду, за допомогою якого ми коннектимся до MySQL. А також очищаємо рядок, отриману через текстове поле форми від спеціальних символів. Для екранування використовується функція mysqli_real_escape_string():

$connect=mysqli_connect(‘localhost’, ‘root’, “, ‘user_site’);
$username = mysqli_real_escape_string($connect,$_POST[‘username’]);

Потім перевіряємо наявність користувач з таким логіном в таблиці table1. Якщо знаходимо його, то генеруємо з допомогою функції shuffle() новий пароль із значень елементів масиву $simv[]. Після чого «апдейтим» значення стовпця з паролем:

$zapros = “SELECT `id` FROM `table1` WHERE `name`='{$username}’ LIMIT 1”;
$sql = mysqli_query($connect,$zapros) or die(mysqli_error());
if (mysqli_num_rows($sql)==1)
{
$simv = array (“92”, “83”, “7”, “66”, “45”, “4”, “36”, “22”, “1”, “0”,
“k”, “l”, “m”, “n”, “o”, “p”, “q”, “1r”, “3s”, “a”, “b”, “c”, “d”, “5e”, “f”, “g”, “h”, “i”, “j6”, “t”, “u”, “v9”, “w”, “x5”, “6y”, “z5”);
for ($k = 0; $k < 8; $k++)
{
shuffle ($simv);
$string = $string.$simv[1];
}
$zapros = “UPDATE `table1’SET `pass`='{$string}’ WHERE `name`='{$username}’ “;
$sql = mysqli_query($connect,$zapros) or die(mysqli_error());

Відновлення пароля на сайті PHP продовжимо з вибірки з БД нового значення і відправки його на вказану при реєстрації поштову скриньку. Після чого повідомимо користувачеві, що йому слід перевірити своє «мило»:

$zapros = “SELECT `email` FROM `table1` WHERE `name`='{$username}’ LIMIT 1”;
$sql = mysqli_query($connect,$zapros)or die(mysqli_error());
$r = mysqli_fetch_assoc($sql);
$mail = $r[’email’];
mail($mail, “Запит на відновлення паролю”, “Hello, $username. Your new password: $string”);
}
echo “На ваш поштовий ящик було відправлено лист з новий паролем”;

Перевірка в дії

Тепер перевіримо працездатність написаного скрипта. Спочатку створимо одну власну запис у базі. Потім введемо логін юзера в форму і відішлемо дані на сервер. Після цього перевіримо поштову скриньку. Як бачимо, повідомлення зі значенням нового паролю було надіслано на «мило».

Як реалізувати в PHP відновлення пароля

Потім заглянемо в таблицю. Ми бачимо, що значення пароля у відповідному стовпці оновилося. Отже, створена нами програма працює коректно.

Як реалізувати в PHP відновлення пароля

Так що існує краще рішення збереження і відновлення пароля, ніж покривати бідна тварина татуюваннями. Сподіваюся, мій товариш це зрозуміє Як реалізувати в PHP відновлення пароля .