今天小编给大家分享一下laravel中guard指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。
本文操作环境:Windows10系统、Laravel5.4版、Dell G3电脑。
laravel中guard
其实无论是Guard还是Provide,你都可以理解为。某个特定功能的插件。
他的作用是处理一个认证,来判断每个请求、调用是否是登录过,或者允许通过的,
什么是Guard
在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用。而登录/注册认证的核心就是:
用户的注册信息存入数据库(登记)
从数据库中读取数据和用户输入的对比(认证)
上述两步是登录/注册的基本,可以看到都会涉及到数据库的操作,这两步框架底层已经帮我们做好了,而且考虑到了很多情况,比如用户认证的数据表不是user表而是admin_user,认证字段是phone而不是email,等等一些问题都是Guard所要解决的,通过Guard可以指定使用哪个数据表什么字段等,Guard能非常灵活的构建一套自己的认证体系。
通俗地讲,就是这样:Guard就像是小区的门卫大叔,冷酷无情,不认人只认登记信息。
进小区之前大叔需要先检查你的身份,验证不通过大叔就不让你进去。
如果是走路/骑车进去,大叔1需要检查你的门禁卡,他拿出记录了小区所有业主门禁卡信息的本子查看你这个门禁卡信息有没有在这个本子上;
如果你开车进去,大叔2就从记录了所有业主车牌号的本子中检查你的车牌号,所以新业主要小区了需要告知门卫大叔们你的门禁卡信息或者车牌号,要不然大叔2不让你进。
如果是物业管理员要进小区,门卫大叔3也只认登记信息,管理员出示他的管理员门禁卡,门卫大叔就会检查记录了管理员门禁卡信息的本子。
上面讲的对应了框架中的多用户认证:
走路/骑车的人 -> 门禁卡
开车的人 -> 车牌号
物业管理员 -> 门禁卡
门禁卡和车牌号都是不同的认证方式,而门卫大叔查看的本子就对应了不同数据库中的用户信息,这样讲是不是更容易理解了。
Lumen/Laravel中以中间件(Middleware)的方式提供了非常灵活的认证,通过简单的配置就可以切换多个认证。
一个Guard会涉及到三个部分,分别是:
Guard实现本身
User Provider用户提供者,指定哪个数据表以什么方式获取(eloquent/database)
Authenticatable接口规定那些东西可以被认证,就是实现它的接口嘛
扩展知识:
Guard我的理解他应该是一个类似用户认证的东西。
在 config/auth.php 中有配置 guards 的参数,可以看出来 web 和 api 是两个 guards。
在平时的业务中api可能更多的是用户前台用户的操作,而web更多的是后台用户的操作。
默认配置都是指向 users 的 provider。
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],
接下来看看 provider 都有什么配置。
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ],
在 providers 中有刚才看到的 users 配置了吧,这个就是配置laravel的用户组,因为前台和后台用户在一般的情况下是分开操作的。所以就可以在这里新建一个 admin 的用户组,并配置。开箱默认只用 users。
相对的每个用户组密码操作应该也是不同的,所以这里还有 password 的配置。
'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ],
平时用于检测登陆用户,或者用户是否登陆我们都用的是 Auth::check() 就可以检测到,这是因为在使用默认配置的时候,guard自动配置为 users 用户组。
'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ],
web guard下指向的就是 users 模型。
但是当如果我们有两个用户组,前台后台的时候怎么进行验证呢?
Auth::check() 是判断用户是否登录的方法,如果使用的默认用户系统,那这样使用没问题。
但是使用两组用户的话,就应该这样操作:
Auth::guard('api')->check() 就是用来判断前台用户是否登录 Auth::guard('web')->check() 就是用来判断后台用户是否登录
所以如果使用非默认用户组,则需要用guard来指定。
所以我们平时用的其实就是默认配置,写全就应该是 Auth::guard(‘web)->check()
以上就是“laravel中guard指的是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。