Hướng Dẫn Authentication Laravel
Authentication là phần quan trọng của hầu hết ứng dụng web. Laravel cung cấp hệ thống authentication mạnh mẽ và linh hoạt ngay từ đầu.
Thiết Lập Authentication
Laravel bao gồm scaffolding authentication tích hợp sẵn. Để thiết lập, sử dụng lệnh Artisan sau:
composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev
Lệnh này tạo các view, route và controller cần thiết cho authentication.
Route Authentication
Laravel tự động đăng ký các route authentication. Bạn có thể xem bằng cách chạy:
php artisan route:list
Các route bao gồm:
/login/register/logout/password/reset
Tùy Chỉnh Logic Authentication
Bạn có thể tùy chỉnh logic authentication bằng cách sửa đổi LoginController, RegisterController, và các controller khác trong thư mục App\Http\Controllers\Auth.
Ví Dụ: Chuyển Hướng Sau Đăng Nhập
Để thay đổi đường dẫn chuyển hướng sau đăng nhập, cập nhật thuộc tính redirectTo trong LoginController:
protected $redirectTo = '/dashboard';
Tùy Chỉnh Reset Password
Để tùy chỉnh email reset password, sửa đổi file reset.blade.php trong thư mục resources/views/auth/passwords. Bạn cũng có thể tùy chỉnh thời gian hết hạn token trong config/auth.php:
'passwords' => [
'users' => [
'expire' => 60, // Thời gian hết hạn token tính bằng phút
],
],
Middleware Cho Authentication
Sử dụng middleware auth để bảo vệ route:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth');
Với những route chỉ nên truy cập được bởi khách, sử dụng middleware guest:
Route::get('/login', function () {
return view('auth.login');
})->middleware('guest');
Bảo Vệ Route
Laravel hỗ trợ nhiều authentication guard. Guard định nghĩa cách người dùng được xác thực cho mỗi request.
Ví Dụ: API Guard
Để sử dụng guard api, cập nhật middleware auth:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Xác Thực Hai Yếu Tố (2FA)
Tăng cường bảo mật bằng cách bật xác thực hai yếu tố. Sử dụng package laravel/fortify để triển khai 2FA:
composer require laravel/fortify
Publish file cấu hình:
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
Bật 2FA trong config/fortify.php:
'features' => [
Features::twoFactorAuthentication(),
],
API Token Authentication
Để xác thực API, sử dụng Laravel Sanctum. Cài đặt bằng Composer:
composer require laravel/sanctum
Publish file cấu hình:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Thêm middleware Sanctum vào api trong app/Http/Kernel.php:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Tạo token cho người dùng:
$token = $user->createToken('API Token')->plainTextToken;
Best Practice
- Sử Dụng Mật Khẩu Mạnh: Áp dụng chính sách mật khẩu mạnh khi đăng ký.
- Bật Xác Thực Hai Yếu Tố (2FA): Sử dụng package như
laravel/fortifyđể thêm 2FA. - Bảo Mật API Endpoint: Bảo vệ route API bằng xác thực dựa trên token.
- Test Authentication: Viết test để đảm bảo luồng authentication hoạt động như mong đợi.
- Giới Hạn Số Lần Đăng Nhập: Sử dụng throttling tích hợp của Laravel để ngăn tấn công brute-force.
protected function hasTooManyLoginAttempts(Request $request) {
return $this->limiter()->tooManyAttempts(
$this->throttleKey($request), 5, 1
);
}
Authentication là phần cơ bản của bất kỳ ứng dụng nào. Bằng cách tận dụng hệ thống authentication của Laravel, bạn có thể triển khai xác thực an toàn và thân thiện với người dùng trong dự án của mình.