Chia sẻ chút kinh nghiệm về viết API bằng laravel. Hướng dẫn chi tiết xác thực API bằng passport trong laravel 8
Chi tiết cài đặt laravel, cài đặt laravel passport để xác thực người dúng, hướng dẫn chi tiết cách viết api trong laravel, hướng dẫn chi tiết cách xác thực bằng access token trong laravel
Lưu ý bạn phải cài phần mềm composer mới cài được, kiểm tra phiên bản php bạn đang dùng có tương thích với phiên bản mà laravel yêu cầu hay không. Để chắc ăn bạn nên cài đặt phần mềm xampp phiên bản mới nhất.
composer create-project laravel/laravel project_name
Sau khi thấy màn hình console thông báo như hình thì bạn đã cài đặt thành công laravel phiên bản mới nhất
Sau khi cài xong gõ lệnh sau để di chuyển vào thư mục root của project
cd project_name
chạy lệnh sau để chạy server
php artisan serve
Bạn mở trình duyệt gõ địa chỉ http://localhost:8000, nếu kết quả như hình sau thì ok
+ ở thư mục root của dự án bạn chạy lệnh sau để tải gói cài đặt về tích hợp vào dự án thông qua composer.json
composer require laravel/passport
Bạn có thể mở file composer.json để kiểm tra như hình trên là đã tải về thành công
+ Tiếp theo chúng ta tạo database và kết nối database với dự án laravel chúng ta vừa khởi tạo, bạn vào hệ quản trị phpmyadmin tạo database và chuẩn bị các thông số kết nối database để chuẩn bị nhập vào file env của laravel
+ Mở file .env ở thư mục gốc của project để nhập các thông tin database
+ Tiếp theo chạy lệnh migrate
php artisan migrate
+ ở thư mục root của dự án bạn chạy màn hình console và gõ lệnh sau
php artisan passport:install
Sau khi cài xong màn thình thông báo như trên thì bạn đã thành công, chúng ta chuyển sang bước tiếp theo.
+ Tiếp theo cấu hình cho model User. Lưu ý là chúng ta cũng có thể cấu hình tương tự cho các model khác nếu chúng ta không muốn sử dụng model user mặc định của laravel cho việc xác thực người dùng
Ta vào App\Models\User thêm dòng này vào chỗ use
use Laravel\Passport\HasApiTokens;
và thay thế dòng này vào use trong class
use HasApiTokens, HasFactory, Notifiable;
Kết quả như hình trên
+ Tiếp theo bạn mở file này : App\Providers\AuthServiceProvider
Thêm dòng này vào use
use Laravel\Passport\Passport;
Kéo xuống cuối file thêm dòng này vào
if (! $this->app->routesAreCached()) { Passport::routes(); }
Kết quả sau khi thêm như hình.
Để cài đặt thời gian sống của token ta có thêm đoạn này sau cái Passport:routers
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
Cập nhật phiên bản laravel 9. Thay vì thêm Passport::routes() thì ta thêm các API sau
Passport::loadKeysFrom(__DIR__.'/../secrets/oauth');
Passport::hashClientSecrets();
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
Passport::personalAccessTokensExpireIn(now()->addMonths(6));
+ Tiếp theo bạn mở file : config/auth.php thay thế token bằng passport như hình
Đến đây chúng ta đã xong việc cài đặt passport. Chúng ta chuyển sang bước tiếp theo
Chạy lệnh sau để tạo 1 controller có tên AuthController
php artisan make:controller AuthController
Sau khi chạy lệnh thị file AuthController.php được tạo tự động trong thư mục App\Http\Controller. Chúng ta sẽ viết hàm xử lý đăng ký thành viên và đăng nhập trong controller này.
+ Đầu tiên chúng ta viết 1 API đăng ký thành viên
- Mở file router/api.php để thêm api
Chúng ta phải use cái AuthController vừa tạo vào file này để sử dụng và tiến hành khai báo router register như hình dưới.
Chúng ta sẽ gửi 1 data lên server nên chúng ta tạo route post nhé bạn
- Tiếp theo vào AuthController viết hàm register
Đầu tiên ta phải use thư viện Hash và model user để phục vụ trong hàm register của chúng ta
use App\Models\User;
use Illuminate\Support\Facades\Hash;
Tiến hành viết xử lý hàm register theo cách của bạn. Còn đây là cách viết của mình
Lưu ý để sử dụng được $request->all() như trên thì phải khai báo fillable cho các trường ở trong models nhé bạn. Hàm trên mình sẽ thực hiện lấy dữ liệu từ client gửi lên, thêm nó vào database và trả về access_token.
Trên mình lười ko làm đầy đủ nha, bạn nên kiểm tra cái email đó đã tồn tại trong database chưa trước khi thêm vào nhé
Bạn mở phần mềm postman lên để test api này nhé. các tham số gửi lên mình lấy mặc định như trong model của laravel luôn, nó bao gồm : name, email, password. Link đầy đủ cảu api là http://localhost:8000/api/register
Nếu bạn nhận được kết quả trả về như hình trên thì bạn đã viết thành công api register
Tiếp theo ta viết hàm login
mở file : router/api.php để thêm router
Vào AuthController để viết hàm xử lý login . Lưu ý hàm login cần sử dụng thư viện auth vì vậy chúng ta phải use thư viện auth vào nhé.
use Auth;
Đây là hàm login của mình
Chúng ta mở phần mềm postman lên để test. Link api login sẽ là http://localhost:8000/api/login, nếu bạn đã deploy lên server thì thay localhost:8000 bằng tên miền của bạn nhé.
Nhập email và password mà chúng ta đã đăng ký ở trên
Nếu bạn nhận được response trả về như hình thì bạn đã viết api login thành công.chúng ta chuyển sang bước tiếp theo
+ Tiếp theo chúng ta viết api logout nhé các bạn
Vẫn như api login chúng ta cũng vào file api.php để thêm router sau đó vào file AuthController để viết hàm xử lý nhé.
Để logout được chúng ta cần có 1 cái model tên là OauthAccessToken. Chúng ta sẽ tạo như sau
php artisan make:model
OauthAccessToken
Sau khi chạy lệnh trên thì ta sẽ được file model OauthAccessToken.php trong thư mục App\Models
Tiếp theo ta viết hàm trong models User như sau
public function authAcessToken()
{
return $this->hasMany(OauthAccessToken::class);
}
Dưới đây là nội dung hàm logout của mình
Bước quan trọng nhất đã đến rồi. các bước trên là chúng ta chỉ chẩn bị các điều kiện cần thiết cho bước này.
Chúng ta sử dụng middleware('auth:api') để kiểm tra xác thực tài khoản người dùng. Khi người dùng request đến api của chúng ta mà không truyền access_token thì sẽ không thể vào được hệ thống của chúng ta.
Bước này chúng ta xử lý ở file api.php như sau
API nào cần bắt buộc xác thực tài khoản người dùng thì chúng ta thêm cái middleware ở phía sau như hình trên nhé.
Ở trên mình thêm vào API logout vì logout chỉ thực hiện khi người đó đã đăng nhập và bây giờ muốn thoát ra đúng không nào. mà muốn biết người đó đăng nhập hay chưa thì ta cần cái middleware ấy đó.
Để test trên phân mêm postman thì ở API logout chuyển sang tab authorzitication, chọn Beare Token và dán token của người đã đăng nhập vào ô bên cạnh. Token này chúng ta copy chỗ api login khi chúng ta login xong nó trả về token đó.
Như vậy là chúng ta đã logout thành công.
+ Bây giờ mình sẽ viết thêm 1 API nữa để ví dụ cho các bạn, mình viết API trả về thông tin tất cả thành viên nhé
Chúng ta cũng vào router để thêm router sau đó vào controller để viết hàm xử lý
Chúng ta cũng bắt buộc xác thực ở API list all user này nhé.
Đây là hàm xử lý của nó.
Chúng ta cũng test bằng postman nhé. Đầu tiên là login vào rồi copy cái token, sang bên list all user này dán vào mục authorzition , chọn Bearer token rồi dán vào.
Nếu bạn không dán token vào sẽ không vào đc api list all. Đây là kết quả
Trong bài viết này mình đã hướng dẫn bạn cách để cài đặt laravel, cách cài đặt passport, cách tạo controller, cách tạo model, cách viết api và xác thực api đó. Chúc bạn thành công nhé.
Link github : http://megaurl.in/tJRMy