CakePHP - Servicios
Este capítulo trata con la información sobre el proceso de autenticación disponible en CakePHP.
Autenticación
La autenticación es el proceso de identificar al usuario correcto. CakePHP admite tres tipos de autenticación.
FormAuthenticate- Le permite autenticar usuarios en función de los datos del formulario POST. Por lo general, este es un formulario de inicio de sesión en el que los usuarios ingresan información. Este es el método de autenticación predeterminado.
BasicAuthenticate - Le permite autenticar usuarios mediante la autenticación HTTP básica
DigestAuthenticate - Le permite autenticar usuarios mediante la autenticación HTTP Digest.
Ejemplo de FormAuthentication
Realice cambios en el archivo config / routes.php como se muestra en el siguiente código.
config/routes.php
<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
Router::defaultRouteClass('DashedRoute');
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/auth',['controller'=>'Authexs','action'=>'index']);
$routes->connect('/login',['controller'=>'Authexs','action'=>'login']);
$routes->connect('/logout',['controller'=>'Authexs','action'=>'logout']);
$routes->fallbacks('DashedRoute');
});
Plugin::routes();
Cambie el código del archivo AppController.php como se muestra en el siguiente programa.
src/Controller/AppController.php
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
use Cake\Controller\Component\AuthComponent;
class AppController extends Controller {
public function initialize() {
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Authexs',
'action' => 'login'
],
'loginRedirect' => [
'controller' => 'Authexs',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Authexs',
'action' => 'login'
]
]);
}
public function beforeFilter(Event $event) {
$this->Auth->allow(['index','view']);
$this->set('loggedIn', $this->Auth->user());
}
}
Crear AuthexsController.php archivar en src/Controller/AuthexsController.php. Copie el siguiente código en el archivo del controlador.
src/Controller/AuthexsController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Event\Event;
use Cake\Auth\DefaultPasswordHasher;
class AuthexsController extends AppController {
var $components = array('Auth');
public function index(){
}
public function login(){
if($this->request->is('post')) {
$user = $this->Auth->identify();
if($user){
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
} else
$this->Flash->error('Your username or password is incorrect.');
}
}
public function logout(){
return $this->redirect($this->Auth->logout());
}
}
?>
Crea un directorio Authexs a src/Template y bajo ese directorio crea un View archivo llamado login.php. Copie el siguiente código en ese archivo.
src/Template/Authexs/login.php
<?php
echo $this->Form->create();
echo $this->Form->control('username');
echo $this->Form->control('password');
echo $this->Form->button('Submit');
echo $this->Form->end();
?>
Crea otro View archivo llamado logout.php. Copie el siguiente código en ese archivo.
src/Template/Authexs/logout.php
You are successfully logged out.
Crea otro View archivo llamado index.php. Copie el siguiente código en ese archivo.
src/Template/Authexs/index.php
You are successfully logged in.
<?php
echo $this->Html->link('logout',[
"controller" => "Authexs","action" => "logout"
]);
?>
Ejecute el ejemplo anterior visitando la siguiente URL.
http: // localhost / cakephp4 / auth
Salida
Como se implementó la autenticación, y una vez que intente visitar la URL anterior, será redirigido a la página de inicio de sesión como se muestra a continuación.
Después de proporcionar las credenciales correctas, iniciará sesión y se le redirigirá a la pantalla que se muestra a continuación.
Después de hacer clic en el logout enlace, será redirigido a la pantalla de inicio de sesión nuevamente.