Страница авторизации ( Часть 2 )

Собственно теперь нужно сделать саму таблицу хранения данных о пользователях. Есть множество способов ведения Назовем как нибудь необычно, например users. Делаем 4 поля - id, login, password, hash.

Пароль (password) - будем хранить в шифровке MD5.
После создания таблицы сразу нужно внести новую запись.


1. Переходим на сайт http://md5generator.net
2. Вводим желаемый пароль в поле Input string

3. Нажимаем Generate MD5 hash



Я создал логин admin пароль 1234.


Форма авторизации у нас будет AJAX, т.е проверка данных без перезагрузки страниц. Возвращаемся к нашему файлу верстки страницы авторизации (/module/login/view/login.tpl), модифицируем форму. Тег form меняем на div и убираем у кнопки атрибут type=”submit”.
Чтобы “оживить” кнопку Войти, вешаем на неё событие Onclick с нашей функцией. Пусть будет check_login().

Если всё сделали верно, то получиться:

<div class="login-box-body">
   <div >
       <div class="form-group has-feedback">
           <input type="email" class="form-control" placeholder="Логин">
           <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
       </div>
       <div class="form-group has-feedback">
           <input type="password" class="form-control" placeholder="Пароль">
           <span class="glyphicon glyphicon-lock form-control-feedback"></span>
       </div>
       <div class="row">
           <div class="col-xs-4">
               <button class="btn btn-primary btn-block btn-flat" onclick="check_login();">Войти</button>
           </div>
       </div>
   </div>
</div>


Теперь собственно нужно сделать эту функцию (check_login). Создадим файл login.js в папке js и подключим в файле шаблона (/module/login/view/login.tpl).



Теперь переходим непосредственно к js. Пишем следующую функцию:

function check_login() {
 
   err = 0;
 
   if ($('input[name=login]').val() == ''){err++;}
   if ($('input[name=password]').val() == ''){err++;}
   if (err == 0){
 
 
       var form_data = {
           mode: 'check_login',
           login: $('input[name=login]').val(),
           password: $('input[name=password]').val()
       };
 
       $.ajax({
           url: '/admin/',
           type: 'POST',
           dataType: 'json',
           async:true,
           cache: true,
           data: form_data,
           success: function (data, textStatus) {
              
              
           },
       });
      
   }
}

Я думаю удобно будет посылать ajax запрос на этот же файл (/module/login/control/login.php). Для того, чтобы ответ у запроса был “чистым” нужно разграничить файл с помощью проверки на наличием информации посредством $_POST.


<?php
       include '/include/Site.php';
       $site = new Site();
 
       if (empty($_POST)){
           $site->display('./module/login/view/login.tpl');
       }else{
          // проверка данных
          if ($_POST['mode'] == 'check_login'){
             
          }
       }
   ?>
 

Для того чтобы сверять принятые данные с данными в базе - таблице users. Нужно создать функцию в классе Site которая проверяла правильность логина и пароля. Назовём его так же - check_login, принимать она будет 2 параметра, собственно логин и пароль.

Но, перед этим добавим функцию генерации хэша (соли):

function getSalt() {
   $charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   $randStringLen = 32;
 
   $randString = "";
   for ($i = 0; $i < $randStringLen; $i++) {
       $randString .= $charset[mt_rand(0, strlen($charset) - 1)];
   }
 
   return $randString;
}

Теперь сама функция проверки:

function check_login($login,$password){
   $psw = md5 ($password);
   $login_data = $this->database->get_row ("SELECT * FROM users WHERE login='".$login."' AND password='".$psw."'" );
   if (!empty($login_data)){
       $hash = $this->getSalt();
       $update = array( 'hash' => $hash);
       $update_where = array( 'login' => $login );
       $this->database->update( 'users', $update, $update_where, 1 );
       $out['hash'] = $hash;
       $out['login'] = true;
   }else{
       $out['login'] = false;
   }
  return $out;
}

Т.е получается, что при правильном логине и пароле - пользователю присваивается уникальный хэш, который впоследствии будет использоваться для идентификации личности. Можно ещё сделать это в совокупности с проверкой IP, но не в рамках этого проекта :)

Возвратимся к файлу login.php и задействуем новую функцию, чтобы она отдавала ответ в json формате.

// проверка данных
if ($_POST['mode'] == 'check_login'){
   $login_data = $site->check_login ($_POST['login'],$_POST['password']);
   echo json_encode ($login_data);
}


 




Случайный урок: Псссс..Ты знаешь о PHP ?


PHP  ( англ. PHP: Hypertext Preprocessor ) - Это язык програмирования с огромным количеством во...
Оставить заявку
Имя
Email
Телефон
Опишите суть
Написать сообщение
Имя
Email
Сообщение