最近的项目虽然已经有自己的登陆认证系统,但是感觉接入laravel默认的始终会好一些,手册上只提供了几个简单的使用方法.搞技术的就需要有”然其然,然其所以然”的精神,所以好好的扒了扒其代码,以此记录.
通过在 控制器中添加
$this->middleware('auth');
为控制器提供认证服务
查看auth指向的中间件类的文件,在构造函数中注入了一个
Illuminate\Contracts\Auth\Factory
,并且handle方法参数guards使用的是可变参数的写法,后面处理可变的,从代码里可以看出,guard可以传多个,经过遍历,哪个guard有结果都可以继续将流程走下去.
在判断guard的结果时,多次使用了上面构造函数中的 使用 $this->auth
引用, 注入接口Illuminate\Contracts\Auth\Factory
看源代码,其只是个interface,一个接口而已,但其具体是由哪个实现了该接口的类实现的呢.
在此为了方便,我偷懒用
dd($this->auth);
打印出来了该实例,类名叫 AuthManager
, 那这个 AuthManager
应该是已经注册在容器中了,找到Auth的Provider ,I