Ajax авторизація та реєстрація на php

Створення бази даних

Створимо нову базу даних з назвою testdb. виконавши наступний запит від привілейованого користувача.

Для роботи з базою, додамо окремого користувача testdb і надамо йому необхідні права.

Структура таблиці users

Для зберігання користувачів створимо в базі даних таблицю users. виконавши наступний запит.

  • id - унікальний ідентифікатор користувача
  • username - логін
  • password - шифрований пароль
  • salt - сіль для шифрування пароля

Структура файлів і директорій

Створимо директорію «php-auth» для нашого проекту. Додамо в неї такі файли і папки:

Реєстрація користувачів

При реєстрації, користувачеві потрібно ввести логін, пароль і підтвердження пароля. Після відправки форми будемо робити перевірку на існування введеного логіна. Якщо логін вже існує - повідомляємо про це відвідувача.

Ajax авторизація та реєстрація на php

Вся робота з базою даних буде відбуватися через розширення PDO для PHP. Воно включено в стандартну бібліотеку PHP, починаючи з версії 5.1.

Основна логіка програми знаходиться у файлі classes / Auth.class.php. Розберемо докладніше його вміст.

алгоритм реєстрації

Для створення нового користувача використовується метод User :: create (). який приймає логін і пароль в якості аргументів.

Насамперед, перевіряємо існування користувача. Для цього використовуємо метод User :: getSalt (). який вибирає з бази «сіль» користувача по його логіну. Сіль потрібна для ускладнення підбору паролів користувачів в разі витоку бази.

Якщо користувач існує - викидаємо виняток. Інакше, генеруємо нову сіль і хешіруем їй пароль. Після цього виконуємо запит на додавання даних в базу. Якщо при виконанні запиту відбувається помилка, друкуємо відповідно¿ повідомлення і завершуємо роботу скрипта. Така ситуація може статися при відключенні сервера MySQL або його внутрішньої помилки.

Якщо користувач був усшешно створений, функція User :: create () повертає його унікальний ідентифікатор. Це звичайне числове поле, яке автоматично збільшується при додаванні записів в таблицю.

алгоритм аутентифікації

Для того, щоб перевірити правильність введення логіна і пароля, використовується метод User :: authorize (). Насамперед, ми перевіряємо існування юзера, намагаючись вибрати його сіль з бази. Якщо користувач не знайдений, відразу повертаємо false. Інакше, хешіруем прийнятий пароль цією сіллю через функцію User :: passwordHash (). Потім, робимо вибірку з бази за логіном і хешу пароля.

Якщо результат запиту виявився непустою, то логін і пароль вірні. Зберігаємо пользотельскіе дані в об'єкті класу User. Записуємо id користувача в сесію через метод User :: saveSession (). Якщо в якості першого аргументу - $ remember. передати їй true. то ідентифікатор сесії збережеться в куках. Це дозволить не вводити пароль кожного разу при перезапуску браузера.

Робота з формами через Ajax

Для обробки Ajax-запитів створимо клас AjaxRequest. Збережемо його в файлі classes / AjaxRequest.class.php.

Цей клас полегшить нам обробку даних, відправлених користувачем з форми. Як конструктора, він приймає масив з даними запиту ($ _GET або $ _POST).

Метод getRequestParam () потрібен для отримання параметра із запиту. Він робить додаткову перевірку на існування ключа масиву і повертає null. якщо запит не містить потрібних даних.

Функція setResponse () використовується для формування відповіді. Метод setFieldError () потрібен для передачі повідомлення про помилку в поле форми.

Для того, щоб повернути відповідь користувачеві, ми використовуємо метод showResponse. Він генерує рядок в JSON-форматі, задає потрібні HTTP-заголовки і повертає дані клієнта.

У файлі ajax.php відбувається безпосередня обробка запитів через клас AjaxRequest.

Формат JSON-відповіді

На стороні клієнта, ми повинні мати можливість показати результат операції в зрозумілому для людини вигляді. Для цього ми повертаємо JSON відповідь в такому форматі:

Створимо файл js / ajax-form.js. Він буде перехоплювати подія відправки всіх форм з класом ajax і відправляти асинхронний запит серверу. Вихідний код ajax-form.js.

Для роботи скрипта потрібен jQuery версії 2.0.3 (лежить в архіві з кодами).

Ці коллбекі викликаються тільки, якщо валідація відповіді пройшла успішно. Метод script.ajaxForm.validate перевіряє наявність у відповіді імені поля з помилкою. Якщо таке поле існує, подствечівает його і відображає текст самої помилки.

Ajax авторизація та реєстрація на php

UPDATE: Виправлені помилки, пов'язані з хешированием пароля, нормально запрацювала функція «Запам'ятати мене». Спасибі користувачеві santas156 за знайдені баги.

Рейтинг - 4.9 Голосів - 27

Схожі статті