• 技术文章 >php框架 >Laravel

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

    小思绪*^_^*小思绪*^_^*2021-09-15 11:42:30原创85
    下面是我看php中文网的视频整理的笔记,供大家参考。以下是一些基础知识,如果对基础知识不熟悉的可以看看。我上一遍文章分享的是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文件

    <?php
    namespace App\Http\Middleware;
    use Closure
    class 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控制器

    <?php
    namespace 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文件

    <?php
    namespace App\Http\Middleware;
    use Closure
    class 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文件

    <?php
    namespace App\Http\Middleware;
    use Closure
    class 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);     
                   
        }
    }

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

    以上就是【笔记整理】laravel HTTP中间件的介绍及创建的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:laravel
    上一篇:分享一个​Laravel Mix编译Vue踩坑记录 下一篇:怎么查看laravel的版本
    线上培训班

    相关文章推荐

    • 【laravel】blog项目实战笔记-登录的操作及后台首页的创建• 【laravel】blog项目实战笔记-valicator验证及分类页功能创建• 【laravel】blog项目实战笔记-后台多级分类列表创建及Ajax异步修改分类排序• 【laravel】blog项目实战笔记-弹窗外部插件的引用及后台文章分类的添加编辑等• 类库管理器composer安装和配置laravel

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网