Laravel Passport là một thư viện cung cấp các giải pháp xác thực API cho ứng dụng Laravel. Được phát triển bởi đội ngũ Laravel, Passport giúp bạn dễ dàng thiết lập và quản lý xác thực OAuth2 cho ứng dụng của mình. Với Passport, bạn có thể bảo mật API của mình, cho phép người dùng truy cập vào các tài nguyên một cách an toàn thông qua token. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Laravel Passport, các thành phần của nó, và hướng dẫn cách sử dụng để triển khai xác thực API trong ứng dụng Laravel.
Laravel Passport là một thư viện hoàn chỉnh cho việc xác thực API sử dụng tiêu chuẩn OAuth2. Thư viện này cho phép bạn tạo ra các token truy cập cho người dùng và thực hiện xác thực mà không cần phải lưu trữ các thông tin nhạy cảm như mật khẩu của người dùng. Passport hỗ trợ nhiều loại token như token cá nhân, token dành cho ứng dụng của bên thứ ba và token cho các tác vụ khác nhau.
Trước tiên, bạn cần cài đặt Laravel Passport trong dự án của mình. Bạn có thể thực hiện điều này bằng cách sử dụng Composer:
composer require laravel/passport
Sau khi cài đặt xong, bạn cần chạy các lệnh sau để tạo ra các bảng cần thiết cho Passport:
php artisan migrate php artisan passport:install
Lệnh passport:install
sẽ tạo ra các client để xác thực, bao gồm client cho “Password Grant” và client cho “Personal Access”.
User
ModelMở tệp User.php
trong thư mục app/Models
và thêm trait HasApiTokens
vào model người dùng:
namespace AppModels; use IlluminateFoundationAuthUser as Authenticatable; use LaravelPassportHasApiTokens; class User extends Authenticatable { use HasApiTokens; // Các thuộc tính và phương thức khác của model }
Mở tệp cấu hình config/auth.php
và thay đổi driver xác thực cho API thành passport
:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Trong tệp routes/api.php
, bạn có thể định nghĩa các route cho xác thực API:
use LaravelPassportHttpControllersAccessTokenController; Route::post('login', [AccessTokenController::class, 'issueToken']);
Bạn có thể tạo một phương thức trong controller để xử lý xác thực người dùng và tạo token:
use IlluminateHttpRequest; use AppModelsUser; use IlluminateSupportFacadesAuth; public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { $user = Auth::user(); $token = $user->createToken('Personal Access Token')->accessToken; return response()->json(['token' => $token]); } return response()->json(['error' => 'Unauthorized'], 401); }
Để bảo vệ các route bằng token, bạn có thể sử dụng middleware auth:api
. Ví dụ:
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
Khi bạn đã có token, bạn có thể sử dụng nó để truy cập các API được bảo vệ. Ví dụ, bạn có thể gửi yêu cầu GET đến route /user
với token trong header:
curl -H "Authorization: Bearer {token}" http://your-domain.com/api/user
Nếu bạn sử dụng Refresh Tokens, bạn cần thêm một route để làm mới token:
Route::post('token/refresh', [RefreshTokenController::class, 'refresh']);
Laravel Passport là một công cụ mạnh mẽ giúp bạn quản lý xác thực API một cách dễ dàng và an toàn. Với Passport, bạn có thể triển khai xác thực OAuth2 trong ứng dụng Laravel của mình mà không cần phải lo lắng về việc lưu trữ thông tin nhạy cảm như mật khẩu của người dùng. Bằng cách làm theo các bước hướng dẫn trên, bạn có thể thiết lập Passport trong ứng dụng của mình và bảo vệ các API một cách hiệu quả. Hãy thử nghiệm và áp dụng Passport vào dự án của bạn để tận dụng những lợi ích mà nó mang lại!