讨论数量:
Auth::guard('api')->factory()->getTTL() * 60
源代码简析
本想简述你框红的代码源码逻辑,但再简还是发现以按照执行顺序下这几个类你是逃不过的。
原则:碰到找不到的方法看魔术方法,另一个就是容器解析类名或服务名
Illuminate\Support\Facades\Auth
, // 访问Auth(别名)类其实就是访问此类,最终返回static::$app[$name]
实例,$name为’auth‘- ’\Illuminate\Auth\AuthManager‘ // 容器解析auth别名服务 最终到达此实现类实例,找寻此类guard方法
Tymon\JWTAuth\Providers\LaravelServiceProvider
// 在执行之前guard('api') ,因配置api 的driver项为jwt,auth别名服务已经注册了扩展jwt项驱动实现(此处代码属于注册生产代码,实际执行顺序在服务解析之后启动,注意看父类的extendAuthGuard方法)
4.Tymon\JWTAuth\JWTGuard
//在执行 Auth::guard('api')返回此类的实例
5.\Tymon\JWTAuth\JWT
//在执行Auth::guard('api')->factory()时,显然JWTGuard类中无factory方法,魔术方法指引到本类中寻找factory方法
6.\Tymon\JWTAuth\Manager
// jwt类有factory方法内部 返回调用了本Manager类的getPayloadFactory方法
7.\Tymon\JWTAuth\Factory
// 前一类的getPayloadFactory方法内,返回了本类的实例,即Auth::guard('api')->factory()指向此类实例
8.\Tymon\JWTAuth\Claims\Factory
//执行Auth::guard('api')->factory()->getTTL() 返回 调用本类的getTTL() 方法
即返回本类ttl属性值,而这个值是即是来自于jwt配置文件内的值,如若无配置文件会从jwt的copmoser包内的配置获取默认值(这类动作在jwt相关服务注册阶段就干了)// Illuminate\Support\Facades\Auth.php // 当你访问\Auth::guard('api') 先找到,最终 public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); // 返回从容器中解析的服务别名‘auth’ 实例,即 \Illuminate\Auth\AuthManager实例 return $instance->$method(...$args); }
本想一步步写完,一看已经这么长了,兄弟你还是看源码吧。
Auth::guard('api')->factory()->getTTL() * 60
源代码简析
本想简述你框红的代码源码逻辑,但再简还是发现以按照执行顺序下这几个类你是逃不过的。
原则:碰到找不到的方法看魔术方法,另一个就是容器解析类名或服务名
Illuminate\Support\Facades\Auth
, // 访问Auth(别名)类其实就是访问此类,最终返回static::$app[$name]
实例,$name为’auth‘- ’\Illuminate\Auth\AuthManager‘ // 容器解析auth别名服务 最终到达此实现类实例,找寻此类guard方法
Tymon\JWTAuth\Providers\LaravelServiceProvider
// 在执行之前guard('api') ,因配置api 的driver项为jwt,auth别名服务已经注册了扩展jwt项驱动实现(此处代码属于注册生产代码,实际执行顺序在服务解析之后启动,注意看父类的extendAuthGuard方法)
4.Tymon\JWTAuth\JWTGuard
//在执行 Auth::guard('api')返回此类的实例
5.\Tymon\JWTAuth\JWT
//在执行Auth::guard('api')->factory()时,显然JWTGuard类中无factory方法,魔术方法指引到本类中寻找factory方法
6.\Tymon\JWTAuth\Manager
// jwt类有factory方法内部 返回调用了本Manager类的getPayloadFactory方法
7.\Tymon\JWTAuth\Factory
// 前一类的getPayloadFactory方法内,返回了本类的实例,即Auth::guard('api')->factory()指向此类实例
8.\Tymon\JWTAuth\Claims\Factory
//执行Auth::guard('api')->factory()->getTTL() 返回 调用本类的getTTL() 方法
即返回本类ttl属性值,而这个值是即是来自于jwt配置文件内的值,如若无配置文件会从jwt的copmoser包内的配置获取默认值(这类动作在jwt相关服务注册阶段就干了)// Illuminate\Support\Facades\Auth.php // 当你访问\Auth::guard('api') 先找到,最终 public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); // 返回从容器中解析的服务别名‘auth’ 实例,即 \Illuminate\Auth\AuthManager实例 return $instance->$method(...$args); }
本想一步步写完,一看已经这么长了,兄弟你还是看源码吧。
推荐文章: