惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
V
V2EX - 技术
S
Secure Thoughts
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
S
Securelist
S
Security Archives - TechRepublic
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
GRAHAM CLULEY
H
Hacker News: Front Page
Microsoft Azure Blog
Microsoft Azure Blog
I
Intezer
Google Online Security Blog
Google Online Security Blog
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Webroot Blog
Webroot Blog
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed
The Cloudflare Blog
I
InfoQ
L
LangChain Blog
U
Unit 42
P
Proofpoint News Feed
S
Schneier on Security
S
Security Affairs
Y
Y Combinator Blog
T
Tenable Blog
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
量子位
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
GbyAI
GbyAI
AWS News Blog
AWS News Blog

博客园 - 范仁义

吊打市面上100%的markdown编辑器 范仁义软件合集 全网最通俗易懂傅里叶变换 【强化学习玩转超级马里奥】05-最最简单的超级马里奥训练过程 【强化学习玩转超级马里奥】04-stable-baselines3 库介绍 【强化学习玩转超级马里奥】03-马里奥环境代码说明 【强化学习玩转超级马里奥】02-运行超级马里奥 【强化学习玩转超级马里奥】01-nes-py 包安装实例 【强化学习玩转超级马里奥】01-超级马里奥环境安装 【强化学习玩转超级马里奥】00-强化学习玩马里奥课程介绍 linux查找操作 分析MongoDB架构案例 legend3---bootstrap modal框出现蒙层,无法点击modal框内容(z-index问题) legend3---laravel报419错误 laravel自定义中间件实例 git: Failed to connect to github.com port 443: Timed out 记忆规律 tinymce上传的图片不指定宽高 z-index总结
laravel中间件Middleware原理解析及实例
范仁义 · 2021-09-26 · via 博客园 - 范仁义

laravel中间件Middleware原理解析及实例

一、总结

一句话总结:

二、laravel中间件Middleware原理解析

1、身份中间件 实例

legend3/app/Http/Middleware/Home/User.php

这是写的中间件的代码,逻辑就是判断用户是否登录,没登录就退出

 1 <?php
 2 
 3 namespace App\Http\Middleware\Home;
 4 
 5 use Closure;
 6 use Auth;
 7 
 8 class User
 9 {
10     /**
11      * Handle an incoming request.
12      *
13      * @param  \Illuminate\Http\Request  $request
14      * @param  \Closure  $next
15      * @return mixed
16      */
17     public function handle($request, Closure $next)
18     {
19         //前端的登录中间件
20         //作用是用Auth::guard('user')->check()来验证用户登录,
21         //如果登录成功就进行下一步
22         //如果没有登录成功就返回到登录页
23         if(!Auth::guard('user')->check()){
24             return redirect('/login');
25         }
26         return $next($request);
27     }
28 }

legend3/app/Http/Kernel.php

这里是注册中间件,相当于给中间件取别名,使用的时候可以直接通过别名调用

 1     protected $routeMiddleware = [
 2         //fry
 3         //后端的登录中间件注册
 4         'admin.auth'=>Middleware\Admin\Admin::class,
 5         //前端的登录中间件注册
 6         'home.auth'=>Middleware\Home\User::class,
 7 
 8         //
 9 
10         'auth' => \App\Http\Middleware\Authenticate::class,
11         'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
12         'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
13         'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
14         'can' => \Illuminate\Auth\Middleware\Authorize::class,
15         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
16         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
17         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
18         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
19     ];

在配置文件auth中注册guard

如果使用Auth::guard('user')->check()
中的guard,就需要注册guard

如果只是作为普通中间件使用,不使用guard,就不需要

例如$this->middleware('home.auth')->except(['index','get_video_comment']);

使用

在各个控制器中

class VideoController extends Controller
{
    public function __construct()
    {
        //排除'index'方法,进行中间件的验证
        $this->middleware('home.auth')->except(['index','get_video_comment']);
//        $this->middleware('home.auth')->except(['get_video_comment']);
    }
    省略若干代码...
}

如果没有登录,就会被被中间件拦截,跳转到登录页面

2、pjax中间件 实例

注册

中间件代码及位置

pjax中间件代码中的逻辑也非常简单,如果不是pjax请求或者是重定向,就不处理这个请求

否则就处理这个请求