Làm thứ làm cho Laravel Request của bạn thú vị hơn

Laravel 5: Middleware và custom Middleware

Laravel 5: Middleware và custom Middleware

Chào các bạn,

Mình sẽ giới thiệu cho các bạn về phần Middleware của Laravel nhé 😀

Đây là một trong những tính năng hay trong Laravel hỗ trợ ta cũng rất nhiều việc.

1/ Giới thiệu về Middleware

Middleware là gì? Middleware hỗ trợ ta filtering HTTP requests trước khi truy cập vào 1 trang.

Ví dụ: ta muốn khi chưa đăng nhập, không thể nào ta có thể truy cập vào /home, nó sẽ tự redirect qua /login.

Nếu theo cách thông thường, ta sẽ check Auth::check() để kiểm tra đăng nhập hay chưa, chưa thì redirect.

Và theo cách truyền thống này thì khá lâu, vậy nên ta đã có middleware để xử lý vụ này 😀

Nếu ta sử dụng Authentication của Laravel, ta sẽ có sẵn 2 middleware là guest và auth. Với mỗi controller/action có chứa middleware auth, phải cần đăng nhập mới có thể truy cập, guest sẽ không cần dăng nhập.

Dễ hiểu nhất là: kiểm tra điều kiện gì đó để coi có được truy cập page này hay không. (Đối với ASP.NET, ta có thể dùng Filter (ActionFilterAttribute).

2/ Middleware có sẵn

Như mình đã giới thiệu, nếu ta dùng Authentication của Laravel thì ta sẽ có 2 middleware như sau:

  • auth ( đã đăng nhập)
  • guest ( ko đăng nhập)

Ta có thể gán middleware theo 2 cách này:

Tại controller:

Tạo ra hàm khởi tạo (__construct) và set middleware:

class HomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
}

Nếu ta đặt ở hàm khởi tạo, toàn bộ phương thức ở controller này để truy cập được thì phải đăng nhập 😀

Ta cũng có thể đặt hàm middleware này tại các phương thức riêng nếu muốn.

Tại routes:

Rất đơn giản, ta sẽ set middleware như sau:

// cơ bản
Route::get('/', 'HomeController@index')->name('home')->middleware('auth');

// cách 2
Route::get('/', ['as' => 'home', 'uses' => 'HomeController@index', 'middleware' => 'auth']);

// cách 3 - multiple middleware
Route::get('/', ['as' => 'home', 'uses' => 'HomeController@index', 'middleware' => ['auth', 'auth.basic']]);

3/ Custom middleware

Ví dụ, users mình cần phải đăng nhập là 1, admin hay user thường là 2. Vậy mình cần tận 2 middleware.

Trong đó middleware thường mình dùng auth có sẵn, còn middleware kiểm tra admin thì mình sẽ tạo ra mới.

Lưu ý: mình phân biệt admin với user thường thông qua cột type của table users nhé. 0 => Admin, còn lại là bt.

Bước 1: Để tạo ra được 1 middleware, ta dùng lệnh sau:

php artisan make:middleware Admin

Khi chạy xong, 1 file middleware sẽ được tạo ra tại app\Http\Middleware

Bước 2: Mình sẽ mở file middleware vừa dc tạo ra và chỉnh sửa như sau:

<?php 
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Admin {

    public function handle($request, Closure $next)
    {

        if ( Auth::check() && Auth::user()->isAdmin() )
        {
            return $next($request);
        }

        return redirect('/');

    }

}

Bước 3: mình sẽ viết ra hàm isAdmin ở model User

public function isAdmin()
{
    return $this->type == 0;
}

Nếu type == 0 => true, còn lại thì là users bình thường 😀

Bước 4: khai báo middleware, ta mở file app/Http/Kernel.php

Kéo xuống cuối cùng sẽ có biến này:

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

        // khai báo middleware custom
        'admin' => \App\Http\Middleware\Admin::class,
    ];

Các bạn chỉ việc khai báo class của các bạn tương tự như các lines trên và đặt cho nó cái tên thôi 😀

Xong bước 4, ta đã có thể sử dụng middleware với tên là “admin” được rồi 😀

Bạn có thể khai báo middleware tại routes hoặc controller tùy ý 😀

Mình xin kết thúc bài “Laravel 5: Middleware và custom Middleware” tại đây nhé 😀

(Hướng dẫn trên Laravel 5.5, các laravel 5.x tương tự :D)

Cám ơn các bạn quan tâm đã theo dõi 😀

Laravel 5: Middleware và custom Middleware

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

One thought on “Laravel 5: Middleware và custom Middleware

Comments are closed.

Bình luận qua Facebook