【笔记整理】laravel HTTP中间件的介绍及创建

2022-05-15 0 854

下面是我看即刻码站的视频整理的笔记,供大家参考。以下是一些基础知识,如果对基础知识不熟悉的可以看看。我上一遍文章分享的是composer安装laravel,想看更多文章,关注我,希望能给大家提供帮助。

中间件其实就是在路由上面加了一层过滤或是一层保护,前缀和命名空间都是作为group的数组参数传进去的,中间件也是作为group的数组参数传进去

一、中间件书写

添加中间件前

Route::group(['prefix' => 'admin','namespace'=>'Admin'], function () {Rount::get('login','IndexController@login');Rount::get('index','IndexController@index');});

添加web中间件后

Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>['web']], function () {Rount::get('login','IndexController@login');Rount::get('index','IndexController@index');});

web中间件可以用session功能,启用CSRF保护

Route::get('/',function(){session(['key'=>123]);return view('welcome');});

再设置一个路由,用来输出session

Route::get('/test',function(){echo session('key');return 'test';});

但因为不在一个中间件里,所以取不出session的值

下面我们设置一下把路由放到一个分组的中间件

Route::group(['middleware'=>['web']], function () {Route::get('/',function(){session(['key'=>123]);return view('welcome');});Route::get('/test',function(){echo session('key');return 'test';});});

系统默认的web中间件,中间件在Kernel.php中

使用web中间件时,才会使用session

二、自己手动在Kernel.php文件中定义一个后台管理云登录的中间件

定义前:

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

定义后:

protected $routeMiddleware = [        'auth' => \\Illuminate\\Auth\\Middleware\\Authenticate::class,        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,        'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,        'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class, 'admin.login' => \\App\\Http\\Middleware\\AdminLogin::class,    ];

在cmd窗口切换到项目目录可以用命令创建中间件

php artisan make:middleware AdminLogin

然后在Middleware文件夹查看AdminLogin.php文件

<?phpnamespace App\\Http\\Middleware;use Closureclass AdminLogin{    /**     * Handle an incoming request.     *     * @param  \\Illuminate\\Http\\Request  $request     * @param  \\Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {       echo 12344445;        return $next($request);                        }}

然后调用刚才创建的中间件

Route::group(['middleware'=>['web','admin.login'],], function () {Route::get('/',function(){session(['key'=>123]);return view('welcome');});Route::get('/test',function(){echo session('key');return 'test';});});

三、后台超级管理员的验证

Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'web'], function () {Rount::get('login','IndexController@login');//登录不需要后台管理员的超级认证});Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'admin.login'], function () {Rount::get('index','IndexController@index');//超级管理员需要认证后才能进入欢迎页面和编辑页面Rount::resource('article','ArticleController');});

任何一个用户都可以登录,但是如果登录了成功,就进入欢迎页面,没有登录成功就在登录页面,因为登录的信息存到session里,所以我们利用session的信息判断是否登录

模拟登录是将登录信息写到session里面,然后找到Admin包下IndexController控制器

<?phpnamespace App\\Http\\Controllers\\Admin;use App\\Http\\Controllers\\Controller;class IndexController extends Controller{public function index(){return view('welcome');}    function login(){session(['admin'=>1]); //登录信息用admin存储     return '<h1>登录<h1>'   }}

我们在中间件里输出session测试一下

然后在Middleware文件夹查看AdminLogin.php文件

<?phpnamespace App\\Http\\Middleware;use Closureclass AdminLogin{    /**     * Handle an incoming request.     *     * @param  \\Illuminate\\Http\\Request  $request     * @param  \\Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {       echo session('admin');        return $next($request);                        }}

验证:

我们先登录一下,然后访问欢迎页面,如果输出1,表示我们设置成功了(登录时把1存到session里,然后进入欢迎页面,欢迎页面会调用中间件的AdminLogin.php,),

我们继续设置

Middleware文件夹的AdminLogin.php文件

<?phpnamespace App\\Http\\Middleware;use Closureclass AdminLogin{    /**     * Handle an incoming request.     *     * @param  \\Illuminate\\Http\\Request  $request     * @param  \\Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        if(!session('admin')){return redirect('admin/login'); //如果没有登录跳转到登录页面};        return $next($request);                        }}

以上步骤是我学习的笔记,我把要操作的步骤或重点的记了下来,如果哪有不懂可以留言。谢谢大家支持。希望能为大家提供帮助,如果想看更多信息,关注我,下一篇继续分享。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 【笔记整理】laravel HTTP中间件的介绍及创建 https://www.jike1995.com/36214.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务