Middleware | Laravel | Hướng Dẫn Học | Học Web Chuẩn

Tạo Middleware kiểm tra đăng nhập

  • Ta sẽ tạo một Middleware với các điều kiện lọc riêng để kiểm tra: nếu đăng nhập bằng [email protected] thì sẽ cho xem nội dung, ngược lại nếu đăng nhập bằng username khác thì sẽ redirect trả về trang /home, nếu chưa đăng nhập thì trả về trang /login.
  • Trước tiên tạo file Middleware bằng cách mở cửa sổ lệnh cmd, di chuyển tới thư mục myproject bằng lệnh:
cd C:\xampp\htdocs\myproject\

Tạo một Middleware

TẠO MIDDLEWARE BẰNG LỆNH ARTISAN

php artisan make:middleware CheckLogin
  • php artisan - Công cụ hỗ trợ viết command line tích hợp sẵn trong Laravel, sẽ còn gặp lại nhiều.
  • make:middleware - Lệnh tạo Middleware.
  • CheckLogin - Tên Middleware do mình tự đặt.

Dòng lệnh trên thực thi sẽ cho ta kết quả sau:

Tạo một Middleware

  • Sau khi thực thi lệnh, chúng ta sẽ nhận được thông báo file Middleware đã được tạo "Middleware created successfully.".
  • File Middleware CheckLogin.php vừa tạo sẽ được lưu tại thư mục /app/Http/Middleware/, có nội dung như sau:
<?php namespace App\Http\Middleware; use Closure; class CheckLogin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request); } }
  • Việc chúng ta cần quan tâm là nội dung bên trong function handle.
  • Viết lại function handle trên, với điều kiện xử lý việc đăng nhập:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckLogin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (Auth::check()&&Auth::user()->email == "[email protected]") { return $next($request); } else { return redirect("/home"); } } }
  • use Illuminate\Support\Facades\Auth; Khai báo sử dụng Facades Auth.
  • Nhìn vào câu điều kiện If bên trên, nếu thỏa mãn điều kiện sau thì yêu cầu sẽ được thực thi tiếp (Khi này Routing sẽ làm việc và yêu cầu sẽ trả về trang admin):

    • Auth::check() - đăng nhập.
    • Và Auth::user()->email == "[email protected]" - user có email là [email protected]
  • Ngược lại nếu không thỏa mãn điều kiện trên, sẽ redirect trả kết quả về trang /home.

KHAI BÁO MIDDLEWARE VÀO ROUTING

  • Để Middleware hoạt động, ta cần khai báo Middleware vào /app/Http/Kernel.php
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, 'checklogin' => \App\Http\Middleware\CheckLogin::class, ];
  • checklogin: tên sẽ được sử dụng.
  • \App\Http\Middleware\CheckLogin: đường dẫn tới file CheckLogin.
  • Khi này ta có thể sử dụng được Middleware CheckLogin vừa tạo.

SỬ DỤNG MIDDLEWARE

  • Chúng ta sẽ tiến hành sử dụng Middleware CheckLogin vừa tạo bằng cách viết trong file Routing /routes/web.php:
Route::get('/admin', function () { return view('admin/index'); })->middleware('checklogin::class');
  • Chú ý là tên checklogin sẽ trùng với trên khai báo trong Kernel.php
  • Tới đây ta đã tạo và khai báo sử dụng Middleware CheckLogin thành công, test bằng cách tạo nhiều user khác nhau tại trang http://localhost:82/register, trong đó có một user có email đăng nhập là [email protected], sau đó lần lượt login và chạy trang http://localhost:82/admin để xem kết quả:

    • Nếu login bằng [email protected], và mở trang http://localhost:82/admin, thì sẽ thấy nội dung:

      Đây là trang Admin
    • Nếu login bằng username với email khác, và mở trang http://localhost:82/admin, thì kết quả sẽ trả về trang /home

      Tạo một Middleware

    • Nếu chưa login, và mở trang http://localhost:82/admin, thì kết quả sẽ trả về trang /login

      Tạo một Middleware

Từ khóa » Sử Dụng Middleware Trong Laravel