laravel之Auth剖析
来源:互联网 发布:淘宝手机端承接页装修 编辑:程序博客网 时间:2024/05/22 07:06
最近的项目虽然已经有自己的登陆认证系统,但是感觉接入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 ,Illuminate\Auth\AuthServiceProvider
, AuthManager实例绑定到auth
的接口名称,这个接口名称对应的是 \Illuminate\Auth\AuthManager::class, \Illuminate\Contracts\Auth\Factory::class
,所以针对Factory的实现,使用了AuthManager
再看Auth中 getFacadeAccessor
方法的实现,他对应的同样也是 auth
接口名称,也就是说我们在操作 Auth
以及中间件Authenticate
时,都是AuthManager
的实例在起作用,既然认证的核心都指向了AuthManager
那我们就来仔细研究研究它.
在其源代码中,可以看到他与config/auth.php 文件密切相关,在使用AuthManager
时,通常需要先指定guard,如下面这样使用
Auth::guard(‘admin’),如果没有调用guard()方法,会自动使用默认的guard.
另外通过guard.driver的设置,决定调用createSessionDriver 还是 createTokenDriver ,配置 provider 来设置 认证的数据来源 ,这里以Session驱动为例,
在我们平时调用时 Auth::id();
Auth::user()
,但AuthManage中并没有对应的方法,这里实际是使用了 __call
魔术方法,操作实体变成了 SessionGuard
的实例,最终起作用的实际上就是 SessionGuard
.
到此为止认证的流程才结束了.关于如何使用Token认证,下篇再写.
- laravel之Auth剖析
- laravel--Auth
- Laravel- Auth登录验证
- Laravel多用户Auth登录
- laravel auth 登录
- Laravel 权限控制整理--Auth
- laravel身份验证-Auth的使用
- laravel身份验证-Auth的使用
- 我的Laravel学习之路之我的Laravel学习之路之用户注册和登录 Auth
- laravel 5.4 运行 make:auth 报错
- Laravel 中用户认证(Auth)
- Django 1.5之Auth
- DESFire 学习之AUTH
- laravel学习之学生管理项目基础剖析
- Laravel (Lumen) 中使用JWT-Auth刷新token的问题
- Laravel 5.1 集成 Auth 验证用户注册登录示例
- 关于laravel中auth建立时候的问题
- login-config之auth-method
- 常用的字符串方法
- 是时候,成为真正的高手了!
- opencv分水岭算法的两个新用法
- Vmware虚拟机三种网络模式详解
- 摩尔定律还会一直生效吗?
- laravel之Auth剖析
- ssh web项目出现错误There is no Action mapped for namespace [/] and action name [login] associate解决办法
- Spring AOP 配置after-returning时异常问题
- 移动端输入键盘被遮盖的处理方法
- Ubuntu16.04下使用sublime text3搭建Python IDE
- Networkmanager简单介绍
- ajax实时索搜
- spring注解 实现定时任务
- PAT 1039. 到底买不买(20)