Laravel什么是警卫?


76

我正在查看内置的身份验证控制器,发现它们使用了称为“ Guards”的东西。到现在为止,每当我创建自己的登录/注册表单时,我都从未碰过它们,通常只会做以下事情:

Auth::attempt()

没有任何类型的警卫。我曾尝试查找确切的内容,但实际上找不到任何信息,有人可以向我解释一下警卫的目的是什么?

Answers:


91

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

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

您也可以根据需要创建自己的后卫,此外,Matt Stauffer撰写了有关该主题的精彩介绍性博文


3
警卫也可以保护任何事物。例如,防止未成年人购买股票发生以下事件:$this->preventMinorsGuard();。可以这样使用吗?
brnmonteiro

8

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


1

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

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

快速dd(auth())查看表明它返回的实例AuthManager。因此,我们可以在源代码中查找该类:在AuthManager.php的底部,有一个__call() 魔术方法,可将所有未定义的调用转发到其自己的guard()方法。

public function __call($method, $parameters)
{
    return $this->guard()->{$method}(...$parameters);
}

这清楚地向我们表明,auth()和的方法auth()->guard()不仅看起来相同,而且完全相同。因此,只要使用默认防护,->guard()就可以省去一些额外的防护。


0

守卫角色是对路线进行身份验证

  1. 网络卫士将对网络路由进行身份验证
  2. Api Guard将验证api路由。
  3. 对于其他用户类型,例如,Admin Guard将对管理路由进行身份验证,依此类推。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.