您的位置 首页 php

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

下面是我看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文件

<?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);                        }}

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

文章来源:智云一二三科技

文章标题:【笔记整理】laravel HTTP中间件的介绍及创建

文章地址:https://www.zhihuclub.com/24724.shtml

关于作者: 智云科技

热门文章

网站地图