.. / Codeigniter Blog. Step4: Авторизация

  1. codeigniter-blog

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

1.

Выведем на главную страницу блога ссылки залогинивания, разлогинивания и добавления записи. Для этого дорабатываем вьюер блога /system/application/views/blog_view.php.

<html>  
            <body>     
                   <?
                    foreach ($query->     result() as $row)
                    {
                        echo "<h1>     ".$row->     title."</h1>     ";
                        echo "<p>     ".$row->     body."</p>     ";
                        echo anchor('blog/comments/'.$row->     id,'comments');
                    }
                     echo "<p>     ".anchor('admin/login','logon')." 
 ";
                     echo  anchor('admin/logoff','logoff')." 
 ";
                     echo  anchor('admin/record_add','new record')." </p>     ";
                   ?>     
            </body>    

 

2.

создаем контроллер администрирования /system/application/controller/admin.php

 

<?php
            class Admin extends Controller {
             function Admin()
               {
                parent::Controller();
                $this->     load->     helper('url');
                $this->     load->     helper('form');
                 // подключаем библиотеку поддержки сессий
                $this->     load->     library('session');
               }
            }
            ?>    

3.

Переносим функцию добавления записей в блог из контроллера блога контроллере /system/application/controller/blog.php
в контроллер администрирования /system/application/controller/admin.php

   function record_add()
              {
                    if (isset($_POST)) if (isset($_POST['title'])) // проверяем были ли отосланы данные формы
                    {
                        $this->     db->     insert('records',$_POST);  //  записываем данные формы
                        redirect('');  //  редирект в начало
                    } else  // если данных нет - выводим форму для добавления новой записи в блог
                    $this->     load->     view('record_add');
              }

Исправляем вьюер /system/application/views/record_add.php
в нем находим строку:
echo form_open('blog/record_add');
и заменяем ее на
echo form_open('admin/record_add');

4.

Создаем пустую функцию залогинивания в контроллере администрирования  /system/application/controller/admin.php
 function login()
             {
                     $this->     load->     view('login');
             }

5.

создаем вьюер для залогинивания  /system/application/views/login.php.
<html>  
            <head>     
              <title>     </title>     
            </head>     
            <body>     
            <? echo form_open('admin/login');?>     
            <input type="text" id="login" name="login" value="guest"/>     
            <input type="text" id="password" name="password" value="guest"/>     
            <input type="submit"/>     
            <? echo form_close(); ?>     
            </body>     
            </html>    

6.

Проверяем вывод формы для залогинивания http://ci/admin/login и добавления записи в блог http://ci/admin/record_add

7.

Теперь необходимо перекрыть возможность доступа к функциям администрирования без логина.
для этого дорабатываем конструктор контроллера администрирования /system/application/controller/admin.php
 function Admin()
             {
              parent::Controller();
              $this->     load->     helper('url');
              $this->     load->     helper('form');
              $this->     load->     library('session');
               // проверяем наличие принака залогинивания в сессии
               // если залогинились - выполняем вызванную функцию
               if ($this->     session->     userdata('logon') != '') return;
               // переход к обработке логина
               if ($this->     uri->     segment(2)==='login') return;
               // редирект на логин, если залогинивания не было
               redirect('admin/login');
            }

запускаем скрипт добавления записи в блог http://ci/admin/record_add и обнаруживаем, что доступ закрыт - перебрасывает на залогинивание.

8.

Дорабатываем функцию обработки логина

 function login()
             {
                    if (isset($_POST['password'])) // проверяем был ли прислан пароль
                    // проверяем корректность пароля и логина
                    // Ахтунг! В реальном скрипте пароль в явном виде не должен присутствовать.
                    if ($_POST['password']==='guest')
                    if ($_POST['login']==='guest')
                    {
                        $session_data = array('logon' =>      'Yes!'); // записываем в сессию признак логона
                        $this->     session->     set_userdata($session_data);
                        redirect(''); // редирект на главную страницу
                    }
                    $this->     load->     view('login');
             }

Заходим http://ci/admin/login. Залогиниваемся "guest/guest" снова проверяем добавление записи в блог http://ci/admin/record_add  и убеждаемся,что доступ открыт.

9.

Теперь в контроллер администрирования необходимо добавить функцию разлогинивания - выхода из редакторского режима.

 function logoff()
             {
                     $this->     session->     sess_destroy();  // обнуляем сессию
                     redirect(''); // редирект на главную страницу
             }

вызываем ее  в броузере http://ci/admin/logoff происходит уничтожение сессии и редирект на главную страницу.
Снова переходим на страницу добавления записи http://ci/admin/record_add Убеждаемся,что разлогинивание произошло

10.

Все что сделано выложена в папке step4. К этому можно добавить оформление блога. Пример с оформлением находится в папке - step4a

  1. 2007-09-03
  2. codeigniter-blog
  1. phpfaq.ru/sessions#example - Сессии. Подробное описание работы и объяснение механизма. (phpfaq.ru)
  2. www.realcoding.net/article/view/386 - Сессии в PHP (примеры авторизации)
Go Index Test