Аутентификация пользователя
У каждого есть секреты, которыми он не хочет делиться. Но некоторыми секретами можно поделиться.
В этой главе вы узнаете о том, как:
Создать базу данных пользователей, которые имеют доступ к определенным секретам
(например, ресурсам сервера);
Создать регистрационную форму и последовательность сценариев для аутентификации
(установления подлинности) пользователя перед тем, как открывать ему какие-либо секреты.
Для чего нужна аутентификация пользователя?
Когда вы приступаете к разработке Web-сайта, вы может быть захотите разрешить доступ к информации
только для определенных членов вашей команды разработчиков. Если Web-сайт вашей организации содержит
важные финансовые данные, то вы может быть захотите оградить ваши финансовые документы от всех,
кроме определенного списка инвесторов. Или, возможно, вы не хотите, чтобы посторонние люди копались
в ваших личных вещах.
Самым распространенным способом аутентификации пользователей является cnocoб, при котором имена
пользователей и пароли хранятся в таблице базы данных, а установление подлинности пользователя
(аутентификация) осуществляется через регистрационную (login) форму и сценарий. В следующем упражнении
вы создадите такую таблицу в базе данных и добавим в нее несколько пользователей.
Создание таблицы пользователей
В главе "Создание таблиц баз данных" вы познакомились с процессом создания таблицы, состоящим из
двух этапов. Мы воспользуемся тем же самым процессом для создания таблицы пользователей, имеющих
право доступа к ресурсам сервера.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_createtable.html
и нажмите клавишу Enter. В рабочее окно браузера будет загружена страница
Создание таблицы базы данных: Этап 1 (Рис.8.1).
В поле ввода Имя таблицы введите auth_users.
В поле ввода Количество полей введите 4.
Вид заполненной формы показан на Рис. 11.1.
Рис. 11.1. Страница Создание таблицы базы данных: Этап 1
с заполненной формой
Нажмите кнопку Перейти к Этапу 2. В рабочее окно будет загружена страница
Создание таблицы базы данных: Этап 2 для таблицы auth_users (Рис. 11.2).
Рис. 11.2. Страница Создание таблицы базы данных: Этап 2 для таблицы auth_users
Страница содержит форму, состоящую из четырех строк, для определения параметров полей создаваемой
таблицы. Заполним форму.
В первой строке, в поле ввода Имя поля введите f_name, из открывающегося списка
Тип поля выберите строку varchar, в поле ввода Длина поля введите число 50.
Во второй строке, в поле ввода Имя поля введите l_name, из открывающегося списка
Тип поля выберите строку varchar, в поле ввода Длина поля введите число 50.
В третьей строке, в поле ввода Имя поля введите username, из открывающегося списка
Тип поля выберите строку varchar, в поле ввода Длина поля введите число 25.
В четвертой строке, в поле ввода Имя поля введите password, из открывающегося списка
Тип поля выберите строку varchar, в поле ввода Длина поля введите число 100.
Страница с заполненной формой показана на Рис. 11.3.
Рис. 11.3. Страница Создание таблицы базы данных: Этап 2 с заполненной формой
Нажмите кнопку Создать Таблицу. В рабочее окно браузера будет загружена страница
Создание таблицы базы данных: Этап 2 с сообщением об успешно созданной таблице
auth_users (Рис. 11.4).
Рис. 11.4. Страница Создание таблицы базы данных:
Этап 2 с сообщением о создании таблицы auth_users
В следующем упражнении вы создадите форму и сценарий для добавления записей о пользователях в
таблицу auth_users.
Добавление пользователей в таблицу
В пустой таблице auth_users нет никакого прока. В этом упражнении вы создадите простую форму и
сценарий для добавления записей, похожих на те, что мы создавали в Главе Ввод данных в таблицу.
Создание формы для добавления пользователей
HTML-форма будет содержать поля ввода для каждого столбца таблицы auth_users.
Создайте с помощью текстового редактора новый файл.
Введите блок HTML:
Чтобы начать форму с методом post и действием do_adduser.php, введите код:
Чтобы создать надпись и поле ввода для имени пользователя, введите код:
Чтобы создать надпись и поле ввода для фамилии пользователя, введите код:
Чтобы создать надпись и поле ввода для регистрационного имени пользователя, введите код:
Чтобы создать надпись и поле ввода для пароля пользователя, введите код:
Параметр MAXLENGTH (максимальная длина) для поля ввода пароля указан равным 25, хотя
для поля таблицы базы данных максимальная длина задана равной 100. Это расхождение в длине
учитывает, что будет происходить шифрование введенных данных. Обычный текстовый 25-ти символьный
пароль, который вводится в это поле формы, вероятно может быть удлинен во время шифрования.
Поскольку в базе данных хранятся только зашифрованные пароли, увеличение максимальной длины
поля базы данных сделает возможным поместить туда любой введенный пароль.
Чтобы создать кнопку Добавить, введите код:
Закройте форму и завершите создание HTML-документа:
Сохраните созданный файл с именем show_adduser.html в папке для документов вашего Web-сервера.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_adduser.html
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Добавление пользователя (Рис. 11.5)
Рис. 11.5. Страница Добавление пользователя
На Рис. 11.5вы видите созданную форму, которая содержит все необходимые элементы для записи
информации о пользователе в таблицу базы данных.
Далее вы создадите сценарий для добавления введенных в форму данных в таблицу.
Создание сценария
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы проверить, все ли поля формы имеют значения, введите код:
Мы сделали все поля формы обязательными: если хотя бы одно поле формы останется незаполненным, то
браузер снова загрузит форму для добавления пользователя .
Чтобы создать переменную для хранения имени базы данных, в которой находится таблица, введите код:
Чтобы создать переменную для хранения имени таблицы, куда мы будем добавлять записи, введите код:
Чтобы создать переменную для хранения результата функции mysql_connect( ), введите код:
Символ @ используется для подавления предупреждений, а функция die( ) - для прерывания сценария и
вывода сообщения в случае, если будет невозможно выбрать базу данных.
Чтобы создать переменную для хранения результата функции mysql_select_db( ), введите код:
Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и
вывода сообщения в случае, если будет невозможно выбрать базу данных.
Теперь мы создадим переменную, которая будет хранить оператор SQL. Первая часть оператора содержит
имена полей записи в том порядке, в котором они представлены в таблице. Вторая часть оператора посылает
в таблицу значения полей, введенных в поля формы.
Чтобы создать переменную для оператора SQL, введите код:
Функция password ( ) хеширует (от английского hash - перемешивание) значение переменной
$password перед тем, как оператор SQL поместит его в таблицу. Это риск хранения паролей в базе данных.
Чтобы создать переменную для хранения результата функции mysqi_query ( ), введите код:
Символ @ используется для подавления предупреждений, а функция die( ) - для прерывания сценария и
вывода сообщения в случае, если будет невозможно выполнить запрос.
Закройте блок РНР:
Начните блок HTML:
Чтобы добавить на страницу заголовок, поясняющий пользователю происходящеe действие, введите код:
Чтобы отобразить надпись и значение имени пользователя, введите код:
Чтобы отобразить надпись и значение фамилии пользователя, введите код:
Чтобы отобразить надпись и значение регистрационного имени пользователя, введите код:
Чтобы отобразить надпись и значение пароля с надписью, введите код:
Чтобы добавить ссылку на страницу с формой для добавления следующего пользователя, введите код:
Закройте блок HTML:
Созданный вами сценарий send_simpleform.php должен выглядеть так, как он показан в листинге
приведённом на pис. 11.5.
Рис. 11.6. Листинг сценария.
Сохраните созданный файл с именем do_adduser.php в папке для документов вашего Web-сервера.
Далее вы добавите несколько пользователей в созданную таблицу.
Добавление пользователей
Рассматриваемые далее примеры основываются на добавлении вымышленных пользователей в таблицу базы
данных. Результаты на вашем компьютере могут отличаться в зависимости от того, что вы введете в
свою таблицу пользователей.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_adduser.html
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Добавление пользователя (Рис. 11.5).
В поле ввода Имя введите Ivan.
В поле ввода Фамилия введите Ivanov.
В поле ввода Регистрационное имя (login) введите ivan.
В поле ввода Пароль: введите ilikecheese.
Нажмите кнопку Добавить. В рабочее окно браузера будет загружена страница
Добавлен пользователь (Рис. 11.7).
Рис. 11.7. Страница Добавлен пользователь
Создание регистрационной формы
Эта HTML-форма будет содержать только два поля: для ввода имени пользователя и пароля. Оба поля
будут обязательны.
Создайте с помощью текстового редактора новый файл.
Введите блок HTML:
Чтобы начать форму с методом post и действием do_authuser.php, введите код:
Чтобы создать надпись и поле ввода для регистрационного имени пользователя, введите код:
Чтобы создать надпись и поле ввода для пароля пользователя, введите код:
Чтобы создать кнопку с надписью Регистрироваться, введите код:
Чтобы закрыть форму и завершить HTML-документ, введите код:
Сохраните созданный файл с именем show_login.html в папке для документов вашего Web-сервера.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_login.html
и нажмите клавишу Enter.
B рабочее окно браузера будет загружена страница Регистрационная форма (Рис. 11.8)
Рис. 11.8. Страница Регистрационная форма
Рис. 11.8 вы видите регистрационную форму с полями ввода имени пользователя пароля и с кнопкой
для пересылки формы на обработку.
В следующем упражнении вы создадите сценарий для обработки данных, полученных регистрационной формы.
Создание сценария для определения прав пользователей на доступ к данным
Цель этого сценария — получить регистрационное имя пользователя и пароль из регистрационной формы
и сравнить его с регистрационным именем и паролем, находящимися в одной и той же записи таблицы auth_users.
Создайте с помощью текстового редактора новый файл,
Начните РНР блок:
Чтобы проверить, все ли поля формы имеют значения, введите код:
Мы сделали все поля формы обязательными: если хотя бы одно поле формы останется незаполненным, то
браузер снова загрузит форму для регистрации пользователя.
Чтобы создать переменную для хранения имени базы данных, в которой находится таблица, введите код:
Чтобы создать переменную для хранения имени таблицы, введите код:
Чтобы создать переменную для хранения результата функции mysql_connect ( ), введите код:
Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и
вывода сообщения в случае, если будет невозможно выбрать базу данных.
Чтобы создать переменную для хранения результата функции mysql_select_db( )введите код:
Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания
сценария и вывода сообщения в случае, если будет невозможно выбрать базу, данных .
Чтобы создать оператор SQL, введите код:
Этот оператор просматривает все задаем таблицы и ищет запись, в которой значение поля username
совпадает с введенным в форме значением переменной $usernamе и значение поля password совпадает с
хешированным значением переменной $password
Чтобы создать переменную для хранения результата функции mysql_ query ( ), введите код:
Символ @ используется для подавления предупреждений, а функция die( ) - для прерывания
сценария и вывода сообщения в случае, если будет невозможно выполнить запрос.
Чтобы создать переменную для хранения количества строк, полученных в результе запроса, введите код:
Начнем оператор if.. .else, который проверит переменную $num. Если количество строк,
полученное в результате запроса, не равно 0, то создадим сообщение об успешном прохождении
аутентификации:
Чтобы выполнить это, введите код:
Закройте блок PHP:
Начните блок HTML:
Чтобы отобразить сообщение, введите код:
Чтобы завершить HTML-документ, введите код:
Сохраните созданный файл с именем do_authuser.php в папке для документов вашего Web-сервера.
В следующем упражнении мы проверим работу созданного сценария.
Полный, без комментариев, листинг файла do_authuser.php приведён на рис. 11.9.
Рис. 11.9. Листинг файла do_authuser.php
Проверка аутентификации
В этом упражнении вы попытаетесь пройти аутентификацию в качестве одного из пользователей, запись о
котором хранится в таблице auth_users. Если вы занесли в таблицу своих собственных пользователей,
то результаты ваших проверок могут отличаться от описанных. Сначала попробуем ввести в поля ввода
регистрационной формы имя пользователя и пароль, не существующие в таблице auth_users. Для этого
выполните следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_login.html
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Регистрационная форма (Рис. 11.8).
В поле ввода Регистрационное имя (login) введите sasha.
В поле ввода Пароль введите goodcheese. Заполненная форма показана на Рис. 11.10.
Рис. 11.10. Заполненная регистрационная форма,
содержащая недействительные имя и пароль пользователя
Нажмите кнопку Регистрироваться. В рабочее окно браузера будет вновь загружена страница с
регистрационной формой (Рис. 11.8).
Любые комбинации не существующих в таблице имен пользователя и пароля будут вызывать неудачную
аутентификацию и повторную загрузку страницы с регистрационной формой.
Теперь проверим, как будет проходить аутентификация, если в регистрационную форму внести данные
пользователя, внесенного в таблицу базы данных.
В поле ввода Регистрационное имя (login) введите ivan.
В поле ввода Пароль введите ilikecheese. Заполненная форма показана на Рис.11.11
Рис. 11.11. Регистрационная форма, содержащая действительные имя и пароль пользователя
Нажмите кнопку Регистрироваться. В рабочее окно браузера будет загружена страница Скрытая область
с сообщением об успешном прохождении аутентификации (Рис. 11.12).
Рис. 15.12. Страница Скрытая область
В следующем уроке вы получите представление о файлах "cookie" и их использовании в схеме
аутентификации или для отслеживания пользователей, посещающих ваш сайт.
|