- Authors
- Name
- Nguyễn Đức Xinh
- Published on
- Published on
Hướng dẫn cài đặt Authentication trong Laravel
Bài viết này sẽ hướng dẫn cách cài đặt và cấu hình Authentication API trong Laravel sử dụng Sanctum
Cài đặt Sanctum
Sanctum là một package đơn giản để xác thực API thông qua token. Để cài đặt và cấu hình Sanctum, bạn xem hướng dẫn tại đây: Hướng dẫn cài đặt API trong Laravel
Cấu hình Model User với Sanctum
Đảm bảo rằng model User
của bạn sử dụng trait HasApiTokens
từ Sanctum. Mở file app/Models/User.php
và thêm import sau vào đầu file:
use Laravel\Sanctum\HasApiTokens;
Sau đó, thêm trait HasApiTokens
vào class User
:
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
Tạo Authentication Controller
Đầu tiên ta cần tạo một controller để xử lý các chức năng đăng nhập, đăng ký và lấy thông tin người dùng. Chạy lệnh sau để tạo controller:
php artisan make:controller AuthController
Sau đó, trong file app/Http/Controllers/AuthController.php
, thêm các phương thức sau:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
// Đăng ký người dùng mới
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json(['user' => $user, 'token' => $user->createToken('API Token')->plainTextToken], 201);
}
// Đăng nhập người dùng
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|string|email',
'password' => 'required|string',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
$user = Auth::user();
return response()->json(['user' => $user, 'token' => $user->createToken('API Token')->plainTextToken], 200);
}
return response()->json(['email' => 'The provided credentials do not match our records.'], 401);
}
// Lấy thông tin người dùng hiện tại
public function getMe(Request $request)
{
return response()->json($request->user());
}
}
Cấu hình các Routes Authentication
Trong file routes/api.php
, bạn có thể định nghĩa các route cho authentication như sau:
use App\Http\Controllers\AuthController;
Route::post('login', [AuthController::class, 'login']);
Route::post('register', [AuthController::class, 'register']);
Bảo vệ Routes với Authentication
Bạn có thể bảo vệ các route của mình bằng cách sử dụng middleware auth:sanctum
. Ví dụ, để bảo vệ route getMe
:
Route::middleware('auth:sanctum')->get('me', [AuthController::class, 'getMe']);
Điều này đảm bảo chỉ những người dùng đã xác thực mới có thể truy cập route này.
Kiểm tra API
Giờ bạn có thể kiểm tra API authentication của mình bằng cách sử dụng công cụ Postman.
Lưu ý thêm Header: Accept = application/json
để hổ trợ response theo JSON format.
- POST /api/register : Đăng ký người dùng mới.
- Request body (JSON):
{
"name": "Xinh001",
"email": "xinh001@example.com",
"password": "password123"
}
- POST /api/login : Đăng nhập với người dùng đã có.
- Request body (JSON):
{
"email": "xinh001@example.com",
"password": "password123"
}
- GET /api/user : Lấy thông tin người dùng đã đăng nhập. Bạn cần gửi token từ kết quả đăng nhập dưới dạng Bearer token trong header Authorization.
Cấu hình Authorization Collection
Sau khi có được token thì ta cấu hình Authorization
của Collection
để có thể apply cho tất cả request trong Collection.
Chọn Collection và mở tab Authorization
- Auth Type: Chọn
Bearer Token
- Token: Nhập Token response từ API Login
Cấu hình Authorization Request
Chọn Request muốn cấu hình và mở tab Authorization
- Auth Type: Chọn
Inherit auth from parent
Kiểm tra kết quả của GET /api/user
Kết luận
Với các bước trên, bạn đã hoàn thành việc thiết lập một hệ thống authentication API cơ bản sử dụng Laravel Sanctum. Điều này cung cấp cho bạn một cách bảo mật để xác thực người dùng thông qua token API, giúp bạn xây dựng và quản lý xác thực người dùng trong ứng dụng Laravel của mình.