ບົດຄວາມ

Laravel middleware ມັນເຮັດວຽກແນວໃດ

Laravel middleware ແມ່ນຊັ້ນແອັບພລິເຄຊັນລະດັບປານກາງທີ່ແຊກແຊງລະຫວ່າງຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້ແລະການຕອບສະຫນອງຂອງແອັບພລິເຄຊັນ.

ນີ້ຫມາຍຄວາມວ່າເມື່ອຜູ້ໃຊ້ (Laravel view) ເຮັດການຮ້ອງຂໍກັບເຄື່ອງແມ່ຂ່າຍ (ຕົວຄວບຄຸມ Laravel), ການຮ້ອງຂໍຈະຜ່ານຕົວກາງ. ດ້ວຍວິທີນີ້, ສື່ກາງສາມາດກວດເບິ່ງວ່າຄຳຮ້ອງຂໍນັ້ນຖືກກວດສອບຄວາມຖືກຕ້ອງຫຼືບໍ່: 

  • ຖ້າຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້ຖືກຢືນຢັນ, ຄໍາຮ້ອງຂໍຈະຖືກສົ່ງໄປຫາ backend;
  • ຖ້າຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້ບໍ່ໄດ້ຮັບການພິສູດຢືນຢັນ, ສື່ກາງຈະໂອນຜູ້ໃຊ້ໄປຫາຫນ້າຈໍເຂົ້າສູ່ລະບົບ.

Laravel ອະນຸຍາດໃຫ້ທ່ານ defiສໍາເລັດຮູບແລະນໍາໃຊ້ຕົວກາງເພີ່ມເຕີມເພື່ອປະຕິບັດວຽກງານທີ່ຫຼາກຫຼາຍຍົກເວັ້ນການກວດສອບຄວາມຖືກຕ້ອງ. 

Laravel middlewares, ເຊັ່ນ: ການກວດສອບຄວາມຖືກຕ້ອງແລະການປົກປ້ອງ CSRF, ແມ່ນຢູ່ໃນໄດເລກະທໍລີ app/http/Middleware .

ດັ່ງນັ້ນພວກເຮົາຈຶ່ງສາມາດເວົ້າໄດ້ວ່າເຄື່ອງກາງແມ່ນຕົວກອງຄໍາຮ້ອງຂໍ http, ໂດຍຜ່ານທີ່ມັນເປັນໄປໄດ້ທີ່ຈະກວດສອບເງື່ອນໄຂແລະປະຕິບັດການປະຕິບັດ.

ການສ້າງອຸປະກອນກາງ

ເພື່ອສ້າງຕົວກາງໃຫມ່, ພວກເຮົາດໍາເນີນການຄໍາສັ່ງຕໍ່ໄປນີ້:

php artisan make:middleware <name-of-middleware>

ພວກເຮົາສ້າງ middleware ແລະພວກເຮົາໂທຫາມັນ CheckAge, artisan ຈະ​ຕອບ​ພວກ​ເຮົາ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​:

ປ່ອງຢ້ຽມຂ້າງເທິງສະແດງໃຫ້ເຫັນວ່າຕົວກາງໄດ້ຖືກສ້າງຂື້ນດ້ວຍຊື່ " ເຊັກອາຍຸ ".

ເພື່ອເບິ່ງວ່າຕົວກາງ CheckAge ຖືກສ້າງຂຶ້ນຫຼືບໍ່, ໃຫ້ໄປທີ່ໂຄງການໃນໂຟນເດີ app/Http/Middleware, ແລະທ່ານຈະເຫັນໄຟລ໌ທີ່ສ້າງຂຶ້ນໃຫມ່.

ໄຟລ໌ທີ່ສ້າງຂຶ້ນໃຫມ່ມີລະຫັດຕໍ່ໄປນີ້

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

ໃຊ້ເຄື່ອງກາງ

ເພື່ອໃຊ້ອຸປະກອນກາງ, ພວກເຮົາຈໍາເປັນຕ້ອງລົງທະບຽນມັນ.

ມີສອງປະເພດຂອງເຄື່ອງກາງໃນ Laravel:

  • Middleware globale
  • Route Middleware

Il ເຄື່ອງກາງທົ່ວໂລກ ຈະຖືກປະຕິບັດໃນທຸກໆຄໍາຮ້ອງຂໍ HTTP ຈາກແອັບພລິເຄຊັນ, ໃນຂະນະທີ່ ເສັ້ນທາງ Middleware ຈະຖືກມອບຫມາຍໃຫ້ເສັ້ນທາງສະເພາະ. Middleware ສາມາດລົງທະບຽນໄດ້ທີ່ app/http/Kernel.php. ໄຟລ໌ນີ້ມີຄຸນສົມບັດສອງອັນ $middleware e $routeMiddleware . ຊັບສິນ $middleware ຖືກນໍາໃຊ້ເພື່ອລົງທະບຽນຕົວກາງຂອງໂລກແລະຄວາມເປັນເຈົ້າຂອງ $routeMiddleware ຖືກນໍາໃຊ້ເພື່ອລົງທະບຽນຕົວກາງສະເພາະເສັ້ນທາງ.

ເພື່ອລົງທະບຽນຕົວກາງລະດັບໂລກ, ໃຫ້ຂຽນລາຍການຢູ່ທ້າຍຂອງຊັບສິນ $middleware.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

ເພື່ອລົງທະບຽນຕົວກາງສະເພາະເສັ້ນທາງ, ໃຫ້ເພີ່ມລະຫັດ ແລະມູນຄ່າໃສ່ຊັບສິນຂອງ $routeMiddleware.

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

ພວກເຮົາສ້າງ ເຊັກອາຍຸ ໃນຕົວຢ່າງທີ່ຜ່ານມາ. ດຽວນີ້ພວກເຮົາສາມາດລົງທະບຽນມັນຢູ່ໃນຊັບສິນເສັ້ນທາງກາງ. ລະຫັດສໍາລັບການລົງທະບຽນດັ່ງກ່າວແມ່ນສະແດງໃຫ້ເຫັນຂ້າງລຸ່ມນີ້.

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

ຕົວກໍານົດການ Middleware

ພວກເຮົາຍັງສາມາດຜ່ານຕົວກໍານົດການທີ່ມີ Middleware. 

ຕົວຢ່າງ, ຖ້າແອັບພລິເຄຊັນຂອງທ່ານມີບົດບາດແຕກຕ່າງກັນເຊັ່ນ: ຜູ້ໃຊ້, admin, super admin ແລະອື່ນໆ. ແລະທ່ານຕ້ອງການຢືນຢັນການປະຕິບັດໂດຍອີງໃສ່ບົດບາດ, ທ່ານສາມາດເຮັດໄດ້ໂດຍການຖ່າຍທອດຕົວກໍານົດການກັບຕົວກາງ. 

ເຄື່ອງກາງທີ່ພວກເຮົາສ້າງປະກອບດ້ວຍຟັງຊັນຕໍ່ໄປນີ້, ແລະພວກເຮົາສາມາດຜ່ານການໂຕ້ຖຽງທີ່ກໍາຫນົດເອງຫຼັງຈາກການໂຕ້ຖຽງ $ຕໍ່ໄປ .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

ຕອນນີ້ໃຫ້ພະຍາຍາມຕັ້ງພາລາມິເຕີບົດບາດເປັນຕົວກາງໃຫມ່ທີ່ພວກເຮົາຈະສ້າງຕັ້ງແຕ່ເລີ່ມຕົ້ນ, ຫຼັງຈາກນັ້ນດໍາເນີນການສ້າງ Role Middleware ໂດຍການແລ່ນຄໍາສັ່ງຕໍ່ໄປນີ້.

ປັບ​ປຸງ​ແກ້​ໄຂ​ວິ​ທີ​ການ​ຈັບ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

ພວກເຮົາໄດ້ເພີ່ມພາລາມິເຕີ $role, ແລະພາຍໃນວິທີການເສັ້ນ echo ເພື່ອຂຽນຜົນຜະລິດຊື່ຂອງພາລະບົດບາດ.

ຈົດໝາຍຂ່າວປະດິດສ້າງ
ຢ່າພາດຂ່າວທີ່ສໍາຄັນທີ່ສຸດກ່ຽວກັບການປະດິດສ້າງ. ລົງທະບຽນເພື່ອຮັບພວກມັນທາງອີເມວ.

ຕອນນີ້ໃຫ້ລົງທະບຽນຕົວກາງຂອງ RoleMiddleware ສໍາລັບເສັ້ນທາງສະເພາະ

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

ໃນປັດຈຸບັນເພື່ອທົດສອບຕົວກາງກັບພາລາມິເຕີ, ພວກເຮົາຈໍາເປັນຕ້ອງສ້າງຄໍາຮ້ອງຂໍແລະການຕອບສະຫນອງ. ເພື່ອຈໍາລອງການຕອບສະຫນອງໃຫ້ພວກເຮົາສ້າງຕົວຄວບຄຸມທີ່ພວກເຮົາຈະເອີ້ນວ່າ TestController

php artisan make:controller TestController --plain

ຄໍາສັ່ງທີ່ພຽງແຕ່ປະຕິບັດຈະສ້າງຕົວຄວບຄຸມໃຫມ່ພາຍໃນໂຟນເດີ app/Http/TestController.php, ແລະປ່ຽນວິທີການ index ກັບສາຍ echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

ຫຼັງຈາກການຕັ້ງຄ່າການຕອບສະຫນອງ, ພວກເຮົາສ້າງຄໍາຮ້ອງຂໍໂດຍການດັດແກ້ໄຟລ໌ routes.phpໂດຍການເພີ່ມ route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

ໃນຈຸດນີ້, ພວກເຮົາສາມາດທົດລອງຕົວຢ່າງໂດຍການໄປຢ້ຽມຢາມ URL http://localhost:8000/role

ແລະໃນຕົວທ່ອງເວັບພວກເຮົາຈະເຫັນທັງສອງ echo

Role editor
Test Controller

Middleware ທີ່ສາມາດສິ້ນສຸດໄດ້

Il terminable Middleware ປະຕິບັດບາງວຽກງານຫຼັງຈາກການຕອບສະຫນອງຖືກສົ່ງໄປຫາຕົວທ່ອງເວັບ. ນີ້ສາມາດເຮັດໄດ້ໂດຍການສ້າງຕົວກາງທີ່ມີວິທີການ ຢຸດຢູ່ໃນເຄື່ອງກາງ. Il terminable Middleware ຕ້ອງໄດ້ຮັບການລົງທະບຽນກັບ middleware ທົ່ວໂລກ. ວິທີການ terminate ຈະໄດ້ຮັບການໂຕ້ຖຽງສອງ $request e $response. 

ວິທີການ Terminate ຕ້ອງໄດ້ຮັບການສ້າງຕາມທີ່ສະແດງຢູ່ໃນລະຫັດຕໍ່ໄປນີ້.

php artisan make:middleware TerminateMiddleware

ເມື່ອເຄື່ອງກາງຖືກສ້າງຂື້ນ app/Http/Middleware/TerminateMiddleware.php ໃຫ້ເຮົາແກ້ໄຂລະຫັດດັ່ງນີ້

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

ໃນກໍລະນີດັ່ງກ່າວນີ້, ພວກເຮົາມີວິທີການ handle ແລະວິທີການ terminate ກັບສອງຕົວກໍານົດການ $request e $response.

ຕອນນີ້ໃຫ້ລົງທະບຽນ Middleware

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

ໃນປັດຈຸບັນພວກເຮົາຈໍາເປັນຕ້ອງສ້າງຕົວຄວບຄຸມເພື່ອຈໍາລອງການຕອບສະຫນອງ

php artisan make:controller XYZController --plain

ການ​ປັບ​ປຸງ​ເນື້ອ​ໃນ​ຂອງ​ຫ້ອງ​ຮຽນ​

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

ໃນປັດຈຸບັນພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ແກ້ໄຂໄຟລ໌ routes/web.php ເພີ່ມເສັ້ນທາງທີ່ຕ້ອງການເພື່ອເປີດໃຊ້ການຮ້ອງຂໍ

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

ໃນຈຸດນີ້, ພວກເຮົາສາມາດທົດລອງຕົວຢ່າງໂດຍການໄປຢ້ຽມຢາມ URL http://localhost:8000/terminate

ແລະໃນ browser ພວກເຮົາຈະເຫັນເສັ້ນຕໍ່ໄປນີ້

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

ທ່ານອາດຈະມັກ:

ຈົດໝາຍຂ່າວປະດິດສ້າງ
ຢ່າພາດຂ່າວທີ່ສໍາຄັນທີ່ສຸດກ່ຽວກັບການປະດິດສ້າງ. ລົງທະບຽນເພື່ອຮັບພວກມັນທາງອີເມວ.

Recent articles

Veeam ມີລັກສະນະສະຫນັບສະຫນູນທີ່ສົມບູນແບບທີ່ສຸດສໍາລັບ ransomware, ຈາກການປົກປ້ອງເຖິງການຕອບສະຫນອງແລະການຟື້ນຕົວ

Coveware ໂດຍ Veeam ຈະສືບຕໍ່ໃຫ້ບໍລິການຕອບໂຕ້ເຫດການ extortion cyber. Coveware ຈະສະ ເໜີ ຄວາມສາມາດດ້ານນິຕິສາດແລະການແກ້ໄຂ…

23 April 2024

ການປະຕິວັດສີຂຽວ ແລະ ດິຈິຕອລ: ວິທີການຮັກສາການຄາດເດົາແມ່ນການຫັນປ່ຽນອຸດສາຫະກຳນ້ຳມັນ ແລະອາຍແກັສ

ການຮັກສາການຄາດເດົາແມ່ນການປະຕິວັດຂະແໜງນ້ຳມັນ ແລະ ອາຍແກັສ, ດ້ວຍແນວທາງນະວັດຕະກໍາ ແລະ ຕັ້ງໜ້າໃນການຄຸ້ມຄອງພືດ.…

22 April 2024

ຜູ້ຄວບຄຸມການຕ້ານການໄວ້ວາງໃຈຂອງອັງກິດໄດ້ປຸກ BigTech ໃນໄລຍະ GenAI

CMA ຂອງອັງກິດໄດ້ອອກຄໍາເຕືອນກ່ຽວກັບພຶດຕິກໍາຂອງ Big Tech ໃນຕະຫຼາດປັນຍາປະດິດ. ຢູ່ທີ່ນັ້ນ…

18 April 2024

Casa Green: ການປະຕິວັດພະລັງງານເພື່ອອະນາຄົດທີ່ຍືນຍົງໃນອິຕາລີ

ດຳລັດ “Case Green” ທີ່​ສ້າງ​ຂຶ້ນ​ໂດຍ​ສະ​ຫະ​ພາບ​ເອີ​ລົບ ເພື່ອ​ຍົກ​ສູງ​ປະ​ສິດ​ທິ​ພາບ​ດ້ານ​ພະ​ລັງ​ງານ​ຂອງ​ຕຶກ​ອາ​ຄານ, ໄດ້​ສິ້ນ​ສຸດ​ຂະ​ບວນ​ການ​ນິ​ຕິ​ບັນ​ຍັດ​ຂອງ​ຕົນ​ດ້ວຍ…

18 April 2024

ອ່ານນະວັດຕະກໍາໃນພາສາຂອງເຈົ້າ

ຈົດໝາຍຂ່າວປະດິດສ້າງ
ຢ່າພາດຂ່າວທີ່ສໍາຄັນທີ່ສຸດກ່ຽວກັບການປະດິດສ້າງ. ລົງທະບຽນເພື່ອຮັບພວກມັນທາງອີເມວ.

ປະຕິບັດຕາມພວກເຮົາ