Laravel什么是后卫?

use*_*885 63 php authentication laravel

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

Auth::attempt()
Run Code Online (Sandbox Code Playgroud)

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

The*_*son 77

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

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

如果你愿意的话,你也可以创建自己的后卫,还有Matt Stauffer关于这个主题的好的介绍性博客文章.

  • 警卫也可以保护任何事情.比如防止事件中的次要购买代码:```$ this-> preventMinorsGuard();```.可以这样使用吗? (2认同)

小智 9

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


deb*_*ite 9

由于我有同样的问题,而其他答案没有为我提供我正在寻找的信息(它们完美地解释了守卫的作用,但没有解释为什么你应该担心调用它的方法),我将提供另一个答案。

我也不确定auth()helper 提供的方法和守卫本身提供的方法之间的区别auth()->guard(),因为它们似乎做同样的事情。

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

public function __call($method, $parameters)
{
    return $this->guard()->{$method}(...$parameters);
}
Run Code Online (Sandbox Code Playgroud)

这清楚地向我们表明,auth()和的方法auth()->guard()不仅看起来相同,而且完全相同。因此,只要应该使用默认的守卫,->guard()就可以放心地省略额外的守卫。


小智 8

Guard的作用是验证路由

  1. Web Guard 将验证 Web 路由
  2. API Guard 将验证 API 路由。
  3. 对于其他用户类型,例如管理员警卫将验证管理路由等。