Dù đã qua thời kỳ hoàng kim nhưng Laravel vẫn luôn là một sự lựa chọn tuyệt vời cho những server đề cao sự đơn giản và hiệu quả. Với một cộng đồng support vô cùng đông đảo, Laravel luôn khiến chúng ta ngạc nhiên về những gì mà nó có thể làm đc. Và để giải quyết vấn đề xác thực API authentication, Andy Millington và Simon Ham đã tạo ra Passport dựa trên League OAuth2 server.
Step 1: Cài đặt Laravel
Trước khi tạo dự án Laravel, hãy đảm bảo rằng máy tính của bạn đã cài đặt PHP và Composer. Mở terminal và chạy:
Step 2: Cài đặt biến môi trường
Tiếp theo, mở code dự án, mở terminal và bắt đầu cài đặt các biến môi trường:
Copy file chứa các biến môi trường từ file example:
Thêm các biến môi trường cần thiết, dưới đây là ví dụ cho những biến môi trường không thể thiếu:
Tiếp theo, tạo 1 chuỗi key để mã hóa dữ liệu:
Step 3: Khởi động server và migrate database
Sau khi đã hoàn thành config, khởi động server của bạn:
Bây giờ, server Laravel của bạn đang hoạt động. Tạo các file migration để sinh ra các bảng trong database:
Step 4: Cài đặt Passport
Để cài đặt Passport, chạy command:
Thông thường, Laravel sẽ tạo mặc định cho bạn model User trong App/Models/User. Mở model User và thêm trait HasApiTokens như thế này. Nó sẽ cung cấp một số phương thức giúp bạn kiểm tra token của user:
Vào config/auth.php và chỉ cho Laravel biết rằng bạn muốn sử dụng Passport để xác thực API token:
Tiếp theo, bạn cần tạo secret key cho Passport. Một cho admin và một cho user. Copy lại key dành cho user, bạn sẽ cần thêm nó như là một biến môi trường
Thông thường, các token của Passport sẽ hết hạn sau 1 năm. Nhưng nếu bạn “thích” thì bạn có thể sửa nó ở đây và các token tạo ra sẽ hết hạn sau đúng khoảng thời gian bạn mong muốn App\Providers\AppServiceProvider
Đương nhiên bạn sẽ muốn Passport bảo vệ các api trong api.php , và bạn sẽ cần tới middleware của Passport. Thêm nó vào đây
Như vậy, mỗi khi có request, Laravel sẽ để Passport xác thực token trong request có hợp lệ hay không trước. Vậy khi user đăng nhập thành công, ta cũng cần trả về access token để user lưu lại và sử dụng cho những lần sau. Thêm đoạn code này vào phương thức mà bạn xác thực username và password của user, với token type là Bearer:
Bạn có thể thấy rằng token của Passport còn hỗ trợ cả scopes, nó là những quyền mà user sở hữu token đó có thể thực hiện. Nó được định nghĩa trong App\Providers\AppServiceProvider , function boot như thế này chẳng hạn:
Tất nhiên là sau khi thêm scopes, bạn sẽ muốn “sai” Passport kiểm tra xem con user đó có quyền gọi api đó không thì sẽ “sai” nó như thế này:
Lưu ý rằng option scopes sẽ yêu cầu token có toàn bộ quyền. Còn option scope sẽ chỉ yêu cầu token có 1 trong những quyền được liệt kê. Ví dụ như thế này:
Sau thêm scope cho token, bạn cũng có thể chia nhỏ từng đoạn logic cho từng quyền mà user đó có:
Kết luận
Trên đây là những ứng dụng cơ bản của Laravel Passport mà cá nhân mình rút ra được từ những dự án thực tế đã làm. Passport thực sự rất tuyệt. Nhưng bạn cũng có thế sử dụng một phương án khác là jwt-auth nếu bạn chỉ cần một phương thức xác thực đơn giản hơn và hiệu quả hơn.
Nguồn tham khảo
Laravel Passport: API Authentication using Token and Scopes\