VANHIEP.NET - Làm web giá rẻ - Thiết Kế Website - Thiết Kế Ứng Dụng Mobile

Middleware và đăng nhập đăng xuất trong laravel

Laravel Middleware là công cụ thiết yếu giúp bạn kiểm soát và xử lý các HTTP request một cách hiệu quả. Bài viết này hướng dẫn chi tiết cách tạo, cấu hình và áp dụng Middleware để xác thực người dùng hoặc thực hiện các tác vụ khác trước khi request đến ứng dụng của bạn.

Laravel Middleware: Hướng Dẫn Chi Tiết và Chuẩn SEO

Laravel Middleware là một công cụ mạnh mẽ giúp bạn kiểm soát và xử lý các HTTP request trước khi chúng đến được ứng dụng của bạn. Middleware có thể được sử dụng để xác thực người dùng, ghi log, hoặc thậm chí là chuyển hướng request. Bài viết này sẽ hướng dẫn bạn cách tạo và sử dụng Middleware trong Laravel một cách chi tiết và chuẩn SEO.


1. Tạo Middleware Mới

Bước đầu tiên để sử dụng Middleware là tạo một file Middleware mới. Bạn có thể dễ dàng thực hiện điều này bằng lệnh Artisan:

php artisan make:middleware Ten_middleware

Thay thế Ten_middleware bằng tên bạn muốn đặt cho Middleware của mình (ví dụ: CheckAdmin, AuthenticateUser). Lệnh này sẽ tạo một file mới trong thư mục app/Http/Middleware.


2. Viết Logic Điều Kiện Trong Middleware

Sau khi tạo Middleware, bạn cần mở file vừa tạo (ví dụ: app/Http/Middleware/Ten_middleware.php) và viết logic kiểm tra điều kiện. Trong ví dụ này, chúng ta sẽ sử dụng thư viện Auth của Laravel để kiểm tra xem người dùng đã đăng nhập hay chưa.

Đảm bảo rằng bạn đã thêm dòng use Illuminate\Support\Facades\Auth; ở đầu file để có thể sử dụng Facade Auth.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; // <-- Thêm dòng này

class Ten_middleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        // Ví dụ: Kiểm tra xem người dùng đã đăng nhập chưa
        if (!Auth::check()) {
            // Nếu chưa đăng nhập, chuyển hướng về trang login
            return redirect('/login');
        }

        return $next($request);
    }
}

Giải thích:

  • handle(Request $request, Closure $next): Đây là phương thức chính của Middleware, nơi bạn viết logic xử lý.
  • $request: Đối tượng request HTTP hiện tại.
  • $next: Là một Closure, đại diện cho request sẽ được chuyển đến Middleware tiếp theo trong stack hoặc đến route xử lý.
  • Auth::check(): Kiểm tra xem người dùng hiện tại đã được xác thực (đăng nhập) hay chưa.
  • return redirect('/login');: Nếu người dùng chưa đăng nhập, họ sẽ được chuyển hướng về trang /login. Bạn có thể thay đổi URL này tùy theo ứng dụng của mình.
  • return $next($request);: Nếu điều kiện được thỏa mãn (người dùng đã đăng nhập), request sẽ được chuyển tiếp đến Middleware hoặc route tiếp theo.

3. Đăng Ký Middleware Trong kernel.php

Để Laravel có thể nhận diện và sử dụng Middleware của bạn, bạn cần đăng ký nó trong file app/Http/Kernel.php. Có hai loại Middleware bạn có thể đăng ký:

  • Global Middleware: Áp dụng cho tất cả các request.
  • Route Middleware: Áp dụng cho các route cụ thể hoặc nhóm route.

Trong trường hợp này, chúng ta sẽ đăng ký nó như một Route Middleware để có thể sử dụng nó linh hoạt cho các route cụ thể. Tìm đến protected $routeMiddleware trong file kernel.php và thêm Middleware của bạn:

// app/Http/Kernel.php

protected $routeMiddleware = [
    // ... các middleware khác
    'admin' => \App\Http\Middleware\Ten_middleware::class, // <-- Thêm dòng này
];

Ở đây, chúng ta đã đặt tên cho Middleware của mình là admin. Bạn có thể đặt bất kỳ tên nào bạn muốn để dễ dàng gọi nó sau này.


4. Áp Dụng Middleware Vào Route

Cuối cùng, bạn cần áp dụng Middleware đã tạo vào các route mà bạn muốn kiểm tra điều kiện. Bạn có thể áp dụng cho một route riêng lẻ hoặc một nhóm route.

Áp dụng cho một nhóm route:

Đây là cách phổ biến và hiệu quả khi bạn muốn áp dụng cùng một điều kiện cho nhiều route liên quan.

// routes/web.php

use App\Http\Middleware\Ten_middleware; // <-- Không bắt buộc nếu đã đăng ký trong kernel.php nhưng giúp code rõ ràng hơn

Route::group(['middleware' => ['admin']], function () {
    Route::get('/admin/dashboard', function () {
        return "Chào mừng đến trang quản trị!";
    });

    Route::get('/admin/users', function () {
        return "Danh sách người dùng.";
    });
});

Giải thích:

  • Route::group(['middleware' => ['admin']], function () { ... });: Tạo một nhóm route. Tất cả các route bên trong nhóm này sẽ được áp dụng Middleware có tên là admin mà chúng ta đã định nghĩa trong kernel.php.

Áp dụng cho một route riêng lẻ:

Nếu bạn chỉ muốn áp dụng Middleware cho một route duy nhất, bạn có thể làm như sau:

// routes/web.php

Route::get('/profile', function () {
    return "Trang cá nhân của bạn.";
})->middleware('admin');

Lời kết

Middleware là một phần không thể thiếu trong việc xây dựng các ứng dụng Laravel an toàn và hiệu quả. Bằng cách sử dụng Middleware, bạn có thể dễ dàng quản lý và kiểm soát luồng request, đảm bảo rằng chỉ những người dùng được phép mới có thể truy cập vào các tài nguyên nhất định.

Bạn đã sẵn sàng để áp dụng Middleware vào dự án Laravel của mình chưa?