Laravel 什么是守卫?

新手上路,请多包涵

我正在查看内置的身份验证控制器,我注意到他们使用了一种叫做“警卫”的东西。到目前为止,每当我制作自己的登录/注册表单时,我从未接触过这些,通常只会做以下事情:

 Auth::attempt()

没有任何类型的警卫。我已经尝试查找它到底是什么,但我找不到任何关于它的信息,有人可以向我解释一下守卫的目的是什么吗?

原文由 user1157885 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 356
2 个回答

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

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

如果您愿意,您也可以 创建自己的守卫,还有 Matt Stauffer 关于该主题的这篇很好的介绍性 博客文章

原文由 Sam 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

这清楚地告诉我们, auth()auth()->guard() 的方法不仅看起来一样,而且 完全一样。所以只要要使用默认的守卫,额外的 ->guard() 可以省心。

原文由 debite 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题