Главная > cakephp > Защищенное соединение (SSL/HTTPS) для сайта на CakePHP

Защищенное соединение (SSL/HTTPS) для сайта на CakePHP

Недавно в одном проекте над которым я работаю возникла необходимость для всего сайта принудительно использовать защищенный протокол Https. Как всегда фреймворк CakePHP позволил сделать это с минимальными затратами.


Для начало необходимо подключить Security компонент. Для тех кто забыл или не помнит как это делается напомню:

<?php 
class AppController extends Controller { 
var $components = array('Security'); 
} 
?>;

Теперь создадим метод «forceSSL» который будет перенаправлять пользователей которые набрали адрес сайта в браузере без https://

<?php 
class AppController extends Controller { 
var $components = array('Security');
 
function forceSSL() {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
} 
} 
?>;

И последним шагом будет задать условие при котором будет использоваться наш новый метод.
Для этого зададим в beforeFilter контроллера функцию обратного вызова в Seciruty компоненте:
$this->Security->blackHoleCallback = ‘forceSSL’;

и вызовем метод который проверяет используется ли защищенное соединение:
$this->Security->requireSecure();

Весь код целиком:

<?php 
class AppController extends Controller { 
var $components = array('Security');
 
function beforeFilter() {
$this->Security->blackHoleCallback = 'forceSSL';
$this->Security->requireSecure();
} 
 
function forceSSL() {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
} 
} 
?>;

В приведенном примере условие срабатывает для любого контроллера и любого экшена. Этого можно избежать если вызывать метод requireSecure() не в AppController, а только в необходимом. Если передать этому методу аргументы в виде имен экшенов, то условие будет срабатывать только для этих экшенов. К примеру: requireSecure(‘login’, ‘register’).

Categories: cakephp Tags:
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.