Trong bài viết này, chúng ta sẽ thảo luận về “Laravel Sanctum – Restful API Authentication”. Laravel Sanctum cung cấp một hệ thống xác thực đơn giản cho các ứng dụng di động, SPA [Ứng dụng một trang] và API dựa trên mã thông báo. Chúng tôi có thể tạo nhiều mã thông báo API cho tài khoản người dùng. Ngoài ra, chúng tôi có thể chỉ định các khả năng/phạm vi chỉ định hành động nào mà mã thông báo được phép thực hiện. Ví dụ: chúng tôi có thể chỉ định các khả năng theo vai trò của người dùng
Laravel Sanctum hay Laravel Passport?
- Hộ chiếu cung cấp giải pháp hoàn chỉnh để xác thực OAuth2. Nếu OAuth không bắt buộc trong dự án của bạn thì Sanctum phù hợp với ứng dụng của bạn
- Sanctum nhẹ và dễ thực hiện
Mục lục
- điều kiện tiên quyết
- Bắt đầu
- Cài đặt/Thiết lập Laravel Sanctum
- Cập nhật mô hình người dùng
- Tạo API
- Tạo bộ điều khiển xác thực
- Đăng ký API người dùng
- API người dùng đăng nhập
- Nhận API người dùng
- Cập nhật nhà cung cấp dịch vụ tuyến đường
- Kiểm tra API
- Tạo người dùng mới
- Người dùng đăng nhập
- Nhận người dùng
- Phần kết luận
điều kiện tiên quyết
- Kiến thức về Laravel, bạn có thể kiểm tra bài đăng khác của chúng tôi về Laravel
- Kiến thức cơ bản về HTTP client postman. Bạn có thể tự do sử dụng bất kỳ ứng dụng khách HTTP nào, v.v.
Bắt đầu
Hãy thiết lập một ứng dụng Laravel mới, sử dụng lệnh composer sau vào terminal
composer create-project laravel/laravel laravel-project --prefer-dist
Sau khi cài đặt, cấu hình cơ sở dữ liệu. Mở ". env” nằm ở thư mục gốc của ứng dụng và cập nhật như sau
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root
Cài đặt/Thiết lập Laravel Sanctum
Chạy lệnh sau vào terminal. Thao tác này sẽ cài đặt Laravel Sanctum và các phần phụ thuộc của nó
composer require laravel/sanctum
Tiếp theo, chúng tôi sẽ xuất bản các tệp cấu hình và di chuyển của Laravel Sanctum bằng lệnh sau
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Bây giờ, hãy chạy di chuyển cơ sở dữ liệu
php artisan migrate
Cập nhật mô hình người dùng
Trước khi bắt đầu sử dụng Laravel Sanctum, chúng tôi phải xác minh mô hình của Người dùng. Đảm bảo mô hình Người dùng đang sử dụng đặc điểm “HasApiToken”. Sau đó, nếu được yêu cầu, hãy mở “ứng dụng/Mô hình/Người dùng. php” và thêm các sửa đổi sau
use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; }
Tạo API
Ở đây, chúng tôi tạo ba điểm cuối API để chứng minh Laravel Sanctum hoạt động
- đăng ký điểm cuối cho phép người dùng đăng ký tài khoản
- điểm cuối đăng nhập cho phép người dùng đăng nhập/xác thực chính họ
- điểm cuối của tôi trả về chi tiết người dùng theo mã thông báo được cung cấp, chỉ khi mã thông báo hợp lệ
Tạo bộ điều khiển xác thực
Hãy tạo một “AuthController”. Sử dụng lệnh thủ công sau
php artisan make:controller Api\AuthController
Sau khi thực hiện lệnh, tập tin “AuthController. php” sẽ được tạo trong thư mục “app/Http/Controllers/Api”
Đăng ký API người dùng
Mở “AuthController. php” và thêm đoạn mã bên dưới vào để tạo phương thức đăng ký người dùng
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; public function register[Request $request] { // Validate request data $validator = Validator::make[$request->all[], [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users|max:255', 'password' => 'required|min:10', ]]; // Return errors if validation error occur. if [$validator->fails[]] { $errors = $validator->errors[]; return response[]->json[[ 'error' => $errors ], 400]; } // Check if validation pass then create user and auth token. Return the auth token if [$validator->passes[]] { $user = User::create[[ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make[$request->password] ]]; $token = $user->createToken['auth_token']->plainTextToken; return response[]->json[[ 'access_token' => $token, 'token_type' => 'Bearer', ]]; } }
Đầu tiên, xác thực dữ liệu yêu cầu và xác minh theo các quy tắc đã cho, dữ liệu hợp lệ. Khi người dùng đã được tạo, sau đó chúng tôi tạo mã thông báo truy cập cá nhân mới bằng phương thức "createToken []". Điều này sẽ trả về một phiên bản Laravel\Sacred\NewAccessToken. Chúng tôi đang truy cập giá trị văn bản thuần túy của mã thông báo bằng cách sử dụng thuộc tính “plainTextToken” của phiên bản “NewAccessToken”
Đăng ký tuyến API người dùng
Mở các tuyến/api. php để tạo tuyến chịu trách nhiệm đăng ký người dùng
________số 8API người dùng đăng nhập
Hãy tạo phương thức đăng nhập trong "AuthController"
use App\Models\User; use Illuminate\Support\Facades\Auth; public function login[Request $request] { if [!Auth::attempt[$request->only['email', 'password']]] { return response[]->json[[ 'message' => 'Invalid login details' ], 401]; } $user = User::where['email', $request['email']]->firstOrFail[]; $token = $user->createToken['auth_token']->plainTextToken; return response[]->json[[ 'access_token' => $token, 'token_type' => 'Bearer', ]]; }
Ở đây, chúng tôi đang kiểm tra xem email và mật khẩu có thực sự khớp với người dùng hiện tại không. Sau đó, tạo mã thông báo truy cập cá nhân mới cho người dùng
Đăng nhập Lộ trình API người dùng
Mở các tuyến/api. php để tạo route chịu trách nhiệm đăng nhập/xác thực người dùng
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root0
Nhận API người dùng
Tiếp theo, thêm đoạn mã sau vào “AuthController. php”
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root1
Ở đây, chúng tôi chỉ cần trả lại người dùng hiện được xác thực
Nhận lộ trình API người dùng
Chỉ người dùng được xác thực mới có thể truy cập điểm cuối “/me”. Ở đây, chúng tôi đang sử dụng bảo vệ xác thực thánh địa. Vì vậy, hãy cập nhật tuyến đường như dưới đây
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root2
Cập nhật nhà cung cấp dịch vụ tuyến đường
Trước khi thử nghiệm API, hãy cập nhật “RouteServiceProvider. php” nằm ở “app/Providers”
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root3
Sau này, các tuyến API của chúng tôi sẽ hoạt động hoàn hảo
Kiểm tra API
Tôi đang sử dụng ứng dụng khách Postman HTTP để kiểm tra các API của chúng tôi. Hãy phục vụ ứng dụng Laravel bằng lệnh sau
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=root DB_PASSWORD=root4
Tạo người dùng mới
Để tạo người dùng mới, hãy gửi yêu cầu POST tới http. //127. 0. 0. 1. 8000/api/đăng ký với tên, email và mật khẩu. Đảm bảo rằng mật khẩu của bạn dài ít nhất 10 ký tự theo quy tắc xác thực
Nếu chúng tôi nhận được lỗi xác thực
Người dùng đăng nhập
Để đăng nhập, hãy tạo một yêu cầu POST tới http. //127. 0. 0. 1. 8001/api/ đăng nhập bằng email và mật khẩu của bạn
Nếu thông tin đăng nhập không hợp lệ thì thông báo lỗi sẽ được hiển thị
Nhận người dùng
Nếu chúng tôi cố gắng truy cập điểm cuối “/me” bằng mã thông báo hợp lệ, chúng tôi sẽ nhận được một cái gì đó tương tự như hình ảnh bên dưới
Nếu không, chúng ta sẽ lấy chi tiết người dùng như trong hình bên dưới
Phần kết luận
Trong bài viết này, chúng ta đang thảo luận về “Laravel Sanctum – Restful API Authentication”. Laravel Sanctum rất dễ cài đặt và định cấu hình, chúng tôi cũng có thể tạo nhiều mã thông báo, với vai trò cụ thể được trao cho mỗi mã thông báo. Cuối cùng, ví dụ về Laravel Sanctum API đã kết thúc, hy vọng bạn sẽ thích nó. Chúng ta sẽ thảo luận thêm về Laravel, các tính năng của Laravel, v.v. Vui lòng thêm nhận xét nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào