Tích hợp hệ thống đăng nhập Authentication Plugin trong CakePHP
Tích hợp hệ thống đăng nhập (Authentication Plugin) trong CakePHP
CakePHP cung cấp Authentication Plugin để dễ dàng quản lý xác thực người dùng trong ứng dụng. Dưới đây là các bước tích hợp hệ thống đăng nhập sử dụng plugin này.

1. Cài đặt Authentication Plugin
Chạy lệnh sau để cài đặt plugin Authentication:
composer require cakephp/authentication
Sau khi cài đặt, tải plugin trong file src/Application.php
:
public function bootstrap(): void
{
parent::bootstrap();
$this->addPlugin('Authentication');
}
2. Cấu hình Authentication Middleware
Thêm middleware Authentication vào file src/Application.php
trong phương thức middleware()
:
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
{
$middlewareQueue
->add(new AuthenticationMiddleware($this));
return $middlewareQueue;
}
3. Cấu hình Authentication trong file src/Controller/AppController.php
Trong phương thức initialize()
, thêm cấu hình:
use Authentication\Controller\Component\AuthenticationComponent;
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Authentication.Authentication');
}
4. Cấu hình hệ thống xác thực
Tạo file cấu hình config/authentication.php
để định nghĩa cách người dùng đăng nhập:
return [
'Authentication' => [
'default' => [
'authenticators' => [
'Authentication.Session',
'Authentication.Form' => [
'fields' => [
'username' => 'email',
'password' => 'password',
],
'loginUrl' => '/users/login',
],
],
'identifiers' => [
'Authentication.Password' => [
'fields' => [
'username' => 'email',
'password' => 'password',
],
'resolver' => [
'className' => 'Authentication.Orm',
],
],
],
],
],
];
5. Tạo bảng và Model User
Tạo bảng users
trong cơ sở dữ liệu:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created DATETIME DEFAULT CURRENT_TIMESTAMP,
modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Tạo Model cho bảng:
bin/cake bake model Users
6. Tạo Controller và Views cho User
6.1. Tạo Controller
Tạo Controller UsersController.php
:
bin/cake bake controller Users
Thêm logic đăng nhập và đăng xuất:
public function login()
{
$this->request->allowMethod(['get', 'post']);
$result = $this->Authentication->getResult();
if ($result->isValid()) {
// Chuyển hướng sau khi đăng nhập thành công
$redirect = $this->request->getQuery('redirect', [
'controller' => 'Pages',
'action' => 'display',
'home',
]);
return $this->redirect($redirect);
}
if ($this->request->is('post') && !$result->isValid()) {
$this->Flash->error('Đăng nhập không thành công, vui lòng thử lại.');
}
}
public function logout()
{
$this->Authentication->logout();
return $this->redirect(['controller' => 'Users', 'action' => 'login']);
}
6.2. Tạo Views
Tạo file templates/Users/login.php
:
<h1>Đăng nhập</h1>
<?= $this->Form->create() ?>
<?= $this->Form->control('email', ['label' => 'Email']) ?>
<?= $this->Form->control('password', ['label' => 'Mật khẩu']) ?>
<?= $this->Form->button('Đăng nhập') ?>
<?= $this->Form->end() ?>
7. Bảo vệ các Controller khác
Để yêu cầu đăng nhập trước khi truy cập, sử dụng beforeFilter
trong các Controller:
public function beforeFilter(\Cake\Event\EventInterface $event)
{
parent::beforeFilter($event);
$this->Authentication->addUnauthenticatedActions(['login']);
}
Ngoài ra, bạn có thể kiểm tra người dùng hiện tại:
$user = $this->Authentication->getIdentity();
if ($user) {
$this->set('loggedInUser', $user->getOriginalData());
}
8. Mã hoá mật khẩu người dùng
Khi tạo hoặc sửa người dùng, hãy sử dụng DefaultPasswordHasher
để mã hoá mật khẩu:
use Cake\Auth\DefaultPasswordHasher;
$password = (new DefaultPasswordHasher())->hash($this->request->getData('password'));
9. Kiểm tra kết quả
-
Truy cập URL:
http://yourdomain.com/users/login
-
Đăng nhập với thông tin hợp lệ từ bảng
users
. -
Nếu đăng nhập thành công, bạn sẽ được chuyển hướng đến trang chính.
-
Đăng xuất bằng cách truy cập:
http://yourdomain.com/users/logout
Kết luận
Hệ thống đăng nhập sử dụng Authentication Plugin trong CakePHP cung cấp một giải pháp mạnh mẽ, bảo mật và dễ tích hợp. Bạn có thể mở rộng thêm như quản lý vai trò (roles), phân quyền (authorization), và các tính năng khác để đáp ứng nhu cầu của dự án.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com