Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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"
}

Laravel API Signup

  • POST /api/login : Đăng nhập với người dùng đã có.
    • Request body (JSON):
{
    "email": "xinh001@example.com",
    "password": "password123"
}

Laravel API Login

  • 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 Laravel Authorization Collection

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

Postman Authorization Request

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.

Các nguồn tài liệu