Như anh em cũng biết, bất kỳ hệ thống nào cũng cần có xác thực khi thực hiện một hoặc nhiều hành vi mà hệ thống cho phép. Để tiếp tục series Laravel và những điều thú vị, hôm nay mình sẽ giới thiệu với các bạn về Authentication trong Laravel. Laravel giúp cho việc thực hiện xác thực vô cùng đơn giản. Bạn sẽ không ngờ được rằng Laravel đã xây dựng sẵn, chúng ta chỉ việc dùng và tùy chỉnh theo nhu cầu của mình. Nào, cùng bắt tay tìm hiểu nhé!
1. Giới Thiệu
Trước khi đi sâu vào cách sử dụng Authentication, Hoclaravel.vn tổng hợp qua phần cấu hình liên quan. Trong Laravel, có một file cấu hình rất quan trọng đó là config/auth.php
.
file cấu hình config_auth.php
Hệ Thống Xác Thực
Hệ thống xác thực Authentication của Laravel được xây dựng dựa trên hai thành phần cốt lõi: guard và provider.
Guards
“Guard” giúp cung cấp logic xác thực người dùng. Trong Laravel, hai loại guard phổ biến là session guard và token guard.
- Session Guard: Duy trì trạng thái người dùng trong từng request thông qua cookie.
- Token Guard: Xác thực người dùng bằng cách kiểm tra token hợp lệ trong mỗi request.
Guard xác định cách thức xác thực, và điều này có nghĩa là bạn có thể triển khai một guard mà chỉ cần kiểm tra sự có mặt của thông tin trong headers của request để xác thực người dùng.
Providers
Nếu Guards định nghĩa logic xác thực, thì Providers lấy dữ liệu người dùng từ backend. Laravel hỗ trợ truy suất người dùng thông qua Eloquent hoặc Query Builder vào database.
Nếu bạn có nhiều bảng người dùng hoặc mô hình khác nhau, bạn có thể cấu hình nhiều nguồn để đại diện cho các mô hình/bảng khác nhau. Ví dụ, nếu bạn muốn sử dụng mô hình User trong namespace khác như App\Model
, bạn có thể thay đổi như sau:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Model\User::class,
],
],
Khi bạn đăng ký tài khoản trong hệ thống, trường password
phải có độ dài tối thiểu 6 ký tự và tối đa 255 ký tự. Trường remember_token
nên được thiết lập là nullable() để hỗ trợ chức năng “Remember Me”.
2. Làm Quen Với Authentication Trong Laravel
Laravel tự động tạo ra một số controller để quản lý Authentication trong dự án của bạn. Các controller này nằm trong namespace App\Http\Controllers\Auth
, bao gồm:
- ForgotPasswordController: Xử lý chức năng khi người dùng quên mật khẩu. Hệ thống sẽ yêu cầu người dùng nhập email để gửi mật khẩu mới.
- LoginController: Quản lý chức năng đăng nhập, giúp người dùng đăng nhập bằng email và mật khẩu.
- RegisterController: Xử lý chức năng đăng ký thành viên mới.
- ResetPasswordController: Quản lý chức năng thay đổi mật khẩu của người dùng.
Bắt Đầu Xác Thực
Để thực hiện công việc xác thực, bạn chỉ cần chạy hai dòng lệnh sau:
php artisan make:auth
php artisan migrate
Lệnh make:auth
sẽ sinh ra cấu trúc controller và route cần thiết cho việc xác thực. Lệnh migrate
sẽ tạo ra hai bảng users
và password_resets
.
Sau khi chạy xong, bạn sẽ thấy trong file routes/web.php
có thêm dòng code sau:
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Điều này có nghĩa là hệ thống đã tự động sinh ra các routes cho việc login, logout, register, forgot password. Bạn cũng có thể sử dụng lệnh php artisan route:list
để xem thông tin chi tiết về các route này.
3. Tìm Hiểu Chi Tiết Về Các Controller
Là một lập trình viên, hiểu rõ về từng controller là vô cùng cần thiết. Cùng mình điểm qua từng controller và chức năng của chúng.
ForgotPasswordController
Controller này cho phép người dùng khôi phục mật khẩu. Người dùng sẽ nhập địa chỉ email của mình, và nếu email đó hợp lệ, hệ thống sẽ gửi một link để reset mật khẩu.
LoginController
Controller này xử lý quá trình đăng nhập. Người dùng nhập email và mật khẩu. Nếu thông tin hợp lệ, họ sẽ được chuyển hướng đến trang chính của ứng dụng.
RegisterController
Controller này cho phép người dùng đăng ký tài khoản mới. Khi đăng ký, hệ thống sẽ kiểm tra tính hợp lệ của các thông tin đã nhập trước khi lưu vào database.
ResetPasswordController
Controller này cho phép người dùng đặt lại mật khẩu của mình. Họ sẽ nhận được một link từ email để thiết lập mật khẩu mới.
4. Tùy Chỉnh Authentication
Tùy chỉnh Authentication trong Laravel rất đơn giản và linh hoạt. Bạn có thể thay đổi cấu hình trong file config/auth.php
để phù hợp với yêu cầu dự án. Dưới đây là một số điểm mà bạn có thể tùy chỉnh:
- Thay đổi driver từ
eloquent
sangdatabase
nếu bạn muốn truy suất dữ liệu từ một bảng cụ thể. - Thêm nhiều guard và provider nếu bạn có nhiều loại người dùng và cần xác thực khác nhau.
Ví Dụ Cụ Thể
Giả sử bạn muốn sử dụng database
cho provider, bạn có thể cấu hình như sau:
'providers' => [
'users' => [
'driver' => 'database',
'table' => 'users',
],
],
Bên cạnh đó, bạn cũng có thể thêm nhiều guard. Ví dụ, bạn có thể tạo một guard riêng cho người dùng admin:
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
5. Kết Luận
Authentication trong Laravel là một công cụ vô cùng mạnh mẽ và linh hoạt. Với các thành phần như guard và provider, bạn có thể dễ dàng tùy chỉnh xác thực theo nhu cầu của dự án. Laravel đã cung cấp mọi thứ bạn cần để xây dựng một hệ thống xác thực hoàn chỉnh với rất ít nỗ lực.
Hy vọng bài viết này sẽ giúp bạn nắm bắt được cách sử dụng Authentication trong Laravel. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại câu hỏi ở dưới nhé. Chúc các bạn thành công trong việc phát triển ứng dụng với Laravel!