Laravel什么是后卫?

时间:2016-01-20 09:26:57

标签: php laravel authentication

我正在查看内置的auth控制器,我注意到他们使用了一种名为“Guards”的东西。到目前为止,每当我创建自己的登录/注册表单时,我从未接触过这些并且通常会执行以下操作:

Auth::attempt()

没有任何防守。我已经尝试查找究竟是什么但我无法找到任何相关信息,有人可以向我解释警卫的目的是什么吗?

4 个答案:

答案 0 :(得分:64)

它们是系统应如何存储和检索有关用户信息的定义。

您可以在config/auth.php文件中找到配置。网络守卫是传统的cookie存储 - 因此网络守卫指示Laravel以经典方式存储和检索会话信息。另一方面,API保护使用令牌。因此,如果要使用标头(承载)或查询参数中的API令牌对用户和请求进行身份验证,则可以使用API​​保护。

如果您愿意,也可以create your own guard,Matt Stauffer也就这个主题提供了这个很好的介绍blog post

答案 1 :(得分:1)

防护是提供用于标识经过身份验证的用户的逻辑的一种方式。 Laravel提供了不同的防护措施,例如会话和令牌。会话保护程序通过cookie维护每个请求中用户的状态,另一方面,令牌保护程序通过检查每个请求中的有效令牌来验证用户的身份。

答案 2 :(得分:0)

由于我有相同的问题,而其他答案没有提供我所需要的信息(它们完美地解释了警卫的工作,但不解释为什么您应该担心调用其方法)提供另一个答案。

我也不确定auth()助手提供的方法与警卫本身auth()->guard()提供的方法之间的区别,因为它们似乎相同。

快速dd(auth())显示它返回了AuthManager的一个实例。因此,我们可以在the source code中查找该类:在 AuthManager.php 的底部,有一个__call() magic method,它将所有未定义的调用转发到自己的{ {1}}方法。

guard()

这清楚地向我们表明public function __call($method, $parameters) { return $this->guard()->{$method}(...$parameters); } auth()的方法不仅看起来相同,而且完全相同。因此,只要使用默认防护,就可以省去额外的auth()->guard()

答案 3 :(得分:0)

保护角色是对路由进行身份验证

  1. 网络卫士将对网络路由进行身份验证
  2. Api Guard将对api路由进行身份验证。
  3. 对于其他用户类型,例如Adminguard将对管理路由进行身份验证等等。