Bài 6: Tìm hiểu về Middleware trong Laravel

Bài 6: Tìm hiểu về Middleware trong Laravel

Một trong những yêu cầu chính của bất kỳ ứng dụng web nào là lọc yêu cầu HTTP và tất cả chúng ta cần thực hiện chức năng đó thật tốt. Laravel PHP Framework cũng cung cấp chức năng đó và khái niệm này được gọi là Middle Laravel Middleware.

Ví dụ, Laravel có chứa một middleware xác thực user đăng nhập vào ứng dụng của bạn được chứng thực. Nếu user chưa được chứng thực, middleware sẽ chuyển hướng (redirect) user tới màn hình đăng nhập.

1. Tạo Middleware

Để tạo Middleware các bạn có thể dùng lệnh sau

php artisan make:middleware isAdmin

Trong đó isAdmin là tên của Middleware. Middleware sẽ nằm trong thư mục app  >>  Http  >>  Middleware

Trong bài viết này chúng ta sẽ tạo ví dụ Middleware isAdmin để check xem người dùng có phải Admin hay không

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class isAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(auth()->user()->isAdmin == 1){
           return $next($request);
        }

        return redirect('home')->with('error','You have not admin access');
    }
}

2. Đăng ký Middleware

Sau khi đã tạo Middleware chúng ta cần đăng ký nó trong file app  >>  Http  >>  Kernel.php

Mở file app/Http/Kernel.php và tìm đến  dòng protected $routeMiddleware và thêm vào

'admin' => \App\Http\Middleware\isAdmin::class,

Sau khi thêm đoạn code sẽ trông như sau

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\isAdmin::class,
];

Như vậy từ giờ chúng ta sẽ có thêm môt Middleware tùy chỉnh là admin để kiểm tra quyền Admin.

3. Gọi Middleware trong Single Route

Để gọi Middleware trong route các bạn có thể viết như sau:

Route::get('admin/routes', '[email protected]')->middleware('admin');

4. Gọi Middleware trong Group Route

Ngoài cách gọi Middleare đơn lẻ các bạn cũng có thể gọi nó trong Route Group

Route::group(['middleware' => ['auth','admin']], function () {
    Route::get('admin/routes', '[email protected]');
});

* Lưu ý: Với cách viết Middlware như trong bài này thì khi sử dụng Middleware admin các bạn phải gọi Middleware auth trước nó

Các bạn có thể tham khảo thêm tại trang Document của Laravel

Post Comment