VANHIEP.NET - Làm web giá rẻ - Thiết Kế Website - Thiết Kế Ứng Dụng Mobile
Hướng dẫn chi tiết xác thực API bằng passport trong laravel 8

Hướng dẫn chi tiết xác thực API bằng passport trong laravel 8

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

Bước 1 : Cài đặt dự án 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

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

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

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

Bước 2 : Cài đặt passport trong laravel

+ ở 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

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

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

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 

+ 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

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

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;

 

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

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();
        }

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 laravelKế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

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

Đến đây chúng ta đã xong việc cài đặt passport. Chúng ta chuyển sang bước tiếp theo

Bước 3 : Tạo controller để xử lý việc xác thực 

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

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

- 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

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 ý để 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

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

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

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

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 

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

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

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

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é.

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

Để 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);
    }

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

Dưới đây là nội dung hàm logout của mình

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

Bước 4 : Xác thực API bằng laravel passport

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

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

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 đó.

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

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ý

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

Chúng ta cũng bắt buộc xác thực ở API list all user này nhé.

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

Đâ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ả

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

Tổng kết:

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