Laravel认证原理以及完全自定义认证详解(2)

Guard 用来认证一个用户是否认证成功, UserProvider 用来提供认证模型的来源,而根据项目的 config 管理 guard 以及自定义 guard 等等功能,则是通过 AuthManager 来实现。

AuthManager 应该是有点像策略模式里面的 Context 类以及工厂方法里面的工厂,一方面管理 Guard,另外一方面通过 __call 魔术方法调用具体的策略(Guard)方法。

Auth facade 对应的实现类就是 AuthManager,AuthManager 在容器中注册为单例,用来管理所有的 guard、user provider 以及 guard 的代理工作。

自定义认证

根据上面的知识,可以知道要自定义一个认证很简单。

创建认证模型

创建一个自定义的认证模型,实现 Authenticatable 接口;

创建自定义的 UserProvider

创建一个自定义的 UserProvider,实现 UserProvider 接口,可以返回上面自定义的认证模型;

创建自定义的 Guard

创建一个自定义的 Guard,实现 Guard或StatefulGuard 接口

添加 guard creator 和 user provider creator 到 AuthManager 中

在 AppServiceProvider 的 boot 方法添加如下代码:

Auth::extend('myguard', function(){ ... return new MyGuard(); //返回自定义 guard 实例 ... }); Auth::provider('myuserprovider', function(){ return new MyUserProvider(); // 返回自定义的 user provider });

在 config\auth.php的 guards 数组中添加自定义 guard,一个自定义 guard 包括两部分: driver 和 provider.

'oustn' => [ 'driver' => 'myguard', 'provider' => 'myusers', ],

在 config\auth.php的 providers 数组中添加自定义 user provider.

'myusers' => [ 'driver' => 'myuserprovider' // 里面具体的字段可以根据你创建 user provider 需要的信息自由添加,可以通过 Auth::createUserProvider('myuserprovider') 创建 ],

设置 config\auth.php 的 defaults.guard 为 oustn.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6744c845498baff85dcde09d79d51269.html