我正在查看内置的身份验证控制器,我注意到他们使用了一种叫做“警卫”的东西。到目前为止,每当我制作自己的登录/注册表单时,我从未接触过这些,通常只会做以下事情:
Auth::attempt()
没有任何类型的警卫。我已经尝试查找它到底是什么,但我找不到任何关于它的信息,有人可以向我解释一下守卫的目的是什么吗?
原文由 user1157885 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在查看内置的身份验证控制器,我注意到他们使用了一种叫做“警卫”的东西。到目前为止,每当我制作自己的登录/注册表单时,我从未接触过这些,通常只会做以下事情:
Auth::attempt()
没有任何类型的警卫。我已经尝试查找它到底是什么,但我找不到任何关于它的信息,有人可以向我解释一下守卫的目的是什么吗?
原文由 user1157885 发布,翻译遵循 CC BY-SA 4.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 许可协议
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
796 阅读
646 阅读
它们是系统应该如何存储和检索用户信息的定义。
您可以在
config/auth.php
文件中找到配置。 Web Guard 是传统的 cookie 存储 - 因此 Web Guard 指示 Laravel 以经典方式存储和检索会话信息。另一方面,API 守卫使用令牌。因此,如果您想使用标头(承载)或查询参数中的 API 令牌对用户和请求进行身份验证,您将使用 API 防护。如果您愿意,您也可以 创建自己的守卫,还有 Matt Stauffer 关于该主题的这篇很好的介绍性 博客文章。