Всем привет, и мы продолжаем создавать наш движок на MVC , и сегодня создадим авторизацию.
Всем привет, и мы продолжаем создавать наш движок на MVC, и сегодня создадим авторизацию.
Наши единички вывелись, все хорошо.
Откроем index.php логина в папке view.
<h1>Login</h1>
<form action="login/run" method="post">
<label>Login</label><input type="text" name="login"><br>
<label>Password</label><input type="text" name="password"><br>
<label></label><input type="submit">
</form>
Action задан на метод run. Перейдем в контроллер login.php и добавим его
public function run() {
$this->model->run();
}
В модели логина уберем вывод единичек. Создадим метод run().
public function run() {
$sth = $this->db->prepare("SELECT id FROM users WHERE login = :login AND password = MD5(:password)");
$sth->execute(array(
':login' => $_POST['login'],
':password' => $_POST['password']
));
$data = $sth->fetchAll();
$count = $sth = rowCount();
if($count > 0) {
Session::init();
Session::set('loggedIn', true);
header('Location: ../dashboard');
} else {
header('Location: ../login');
}
}
Здесь мы используем PDO, и я опять же хочу напомнить, кто его не знает, смотрите на сайте статьи по этой теме.
Теперь в нашей базе mvc нам нужно создать таблицу users с 3 полями: id, login, password.
login и password будут типом varchar, login длиной 25, password длиной 32 символа, там будет хэш.
id будет primary key и autoincrement.
Добавим тестового пользователя с логином jesse и паролем - хэшированным логином.
В конструкторе модели логина вызовем родительский конструктор.
public function __construct() {
parent::__construct();
}
Сейчас создадим новый файл dashboard.php в папке controllers, куда скопируем все из контроллера login кроме метода run.
class Dashboard extends Controller {
// ...
public function index() {
$this-view->render('dashboard/index');
}
}
В папке views создадим папку dashboard, где создадим файл index.php с таким содержанием.
Dashboard... Login in only...
В папке libs создадим файл Session.php
class Session {
public static function init() {
@session_start();
}
public static function set($key, $value) {
$_SESSION[$key] = $value;
}
public static function get($key) {
if(isset($_SESSION[$key]))
return $_SESSION[$key];
}
public static function destroy() {
// unset($_SESSION);
session_destroy();
}
}
Добавьте подключение этого файла в index.php после подключения базы данных.
require 'libs/Session.php';
Вызовем в конструкторе класса Dashboard метод init() класса Session.
public function __construct() {
parent::__construct();
Session::init();
$logged = Session::get('loggedIn');
if($logged == false) {
Session::destroy();
header('Location: ../login');
exit();
}
}
Также создадим метод logout() в классе dashboard.
public function logout() {
Session::destroy();
header('Location: ../login');
exit();
}
Теперь перейдем в header.php и создадим там ссылку на выход в меню.
<?php if(Session::get('loggedIn') == true):?>
<a href="<?php echo URL; ?>dashboard/logout">Logout</a>
<?php else: ?>
<a href="<?php echo URL; ?>login">Login</a>
<?php endif; ?>
Теперь добавим вызов метода init() перед блоком с id=header
<?php Session::init(); ?>
Все что осталось, определить константы в файле database.php.
define('DB_TYPE', 'mysql');
define('DB_HOST', 'localhost');
define('DB_NAME', 'mvc');
define('DB_USER', 'root');
define('DB_PASS', '');
Теперь перейдите в файл Database.php и там измените подключение, подставив вместо значений константы, которые мы только что определили.
Итак, могу вас поздравить, мы только что сделали авторизацию. Спасибо за внимание и удачи!
