拉拉维尔 什么是警卫?

2022-08-30 07:59:45

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

Auth::attempt()

没有任何类型的防护装置。我试图查找它到底是什么,但我真的找不到任何关于它的信息,有人可以向我解释警卫的目的是什么吗?


答案 1

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

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

如果您愿意,您还可以创建自己的警卫,马特·斯托弗(Matt Stauffer)也有关于该主题的精彩介绍性博客文章


答案 2

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

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

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

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

这清楚地向我们表明,方法和不仅似乎做同样的事情,而且完全相同。因此,只要应该使用默认防护,就可以放心地省略额外的保护。auth()auth()->guard()->guard()


推荐