Свежайшие Пирожки от CakePHP по-русски

Полнейшее руководство CakePHP 1.2 на русском языке, горячие новости и полезные статьи

Аутентификация

Пользовательская аутентификация встречается во многих веб приложениях. В CakePHP есть несколько систем для аутентификации пользователей, каждая из которых предоставляет различные возможности. В общем случае компонент аутентификации будет проверять если пользовательский аккаунт на сайте. Если есть, то компонент дает доступ этому пользователю на весь сайт.

Этот компонент может быть комбинирован с компонентом ACL (access control lists - списки контроля доступа) для создания разных уровней доступа на сайте. Например ACL Component, может одному пользователю дать доступ только на публичную часть сайта, в кто время как другому в закрытую(админ) зону.

CakePHP компонент AuthComponent очень прост в использовании. Давайте рассмотрим, как создать простую систему аутентификации.

Как и для всех компонентов, нужно добавить 'Auth' в список компонентов вашего контроллера:

Простой текст
  1. class FooController extends AppController {
  2. var $components = array('Auth');

Или добавить в ваш AppController, чтобы все контроллеры могли его использовать:

Простой текст
  1. class AppController extends Controller {
  2. var $components = array('Auth');

Теперь расскажем о некоторых соглашениях при использовании AuthComponent. По умолчанию, AuthComponent ожидает что у вас в базе данных есть таблица 'users' с полями 'username' и 'password'. Бывают случаи, когда база данных не позволяет вам использовать 'password' в качестве названия столбца, немного позже вы увидите как изменить поля по умолчанию в вашем веб приложении.

Создадим таблицу users используя следующий SQL код:

Простой текст
  1. CREATE TABLE users (
  2. id integer auto_increment,
  3. username char(50),
  4. password char(50),
  5. PRIMARY KEY (id)
  6. );

Когда вы создаете таблицу для хранения данных аутентификации, имейте ввиду что AuthComponent ожидает что пароль будет хранится в базу данных в виде хеша, а не простого текста. Убедитесь в том, что поля, которое будети испольоваться для пароля будет иметь достаточную длину (Например 40 символов для SHA1).

Вам нужно создать минимум два метода в вашем контроллере:

Простой текст
  1. class UsersController extends AppController {
  2. var $name = 'Users';
  3. var $components = array('Auth'); //Не обязательно, если вы уже объявили в вашем app controller
  4. /**
  5. * AuthComponent обеспечивает необходимую функциональность
  6. * для логина, так что можете оставить этот метод пустым.
  7. */
  8. function login() {
  9. }
  10. function logout() {
  11. $this->redirect($this->Auth->logout());
  12. }
  13. }

Хотя вы можете оставить метод login() пустым, вам нужно создать шаблон для логина (сохраненный в app/views/users/login.ctp). Это единственный шаблон, который вам нужно создать для UsersController. Пример ниже пордазумевает что вы используете Form helper(хэлпер):

Простой текст
  1. <?php
  2. if ($session->check('Message.auth')) $session->flash('auth');
  3. echo $form->create('User', array('action' => 'login'));
  4. echo $form->input('username');
  5. echo $form->input('password');
  6. echo $form->end('Login');
  7. ?>

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

Верится вам или нет, но все готово! Вот как можно сделать невероятно простую систему аутентификацию используя компонент Auth. Тем не менее, есть еще много вещей, которіе мы может сделать. Давайте на более продвинутое использование конмпонента.