关于Laravel框架中Guard的底层实现 (5)

在深入学习Guard源码后,了解到底层归纳为两个核心,一是UserProvider,认证用户数据来源,通常是本地数据库,二是认证逻辑,逻辑这块主要就是Guard来做了。对于自定义Guard,上面也稍微讲了一点,通过AuthManager的viaRequest来做,对于用户数据源我们也不必拘泥于现有的,我们也可以将数据源指向redis或者远程接口,只要实现相关接口,比如这样:

namespace app\Providers; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\UserProvider; class RedisUserProvider implements UserProvider { /** * Retrieve a user by their unique identifier. * * @param mixed $identifier * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveById($identifier) { // TODO: 通过id取redis中对应的用户 } .... }

也可以从远程接口获取:

class ApiUserProvider implements UserProvider { /** * Retrieve a user by their unique identifier. * * @param mixed $identifier * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveById($identifier) { // TODO: 通过id构造curl请求结果 } }

最后,附上一张我在学习过程中总结的UML图:

Laravel Guard

文章首发在我自己的博客:
https://xydida.com/2021/2/24/PHP/Laravel/The-Guard-in-Laravel-framework/

欢迎大佬们赏光,文章如果有误,还请大家指正。

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

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