【发布时间】:2016-04-26 01:37:51
【问题描述】:
我查看了内置的身份验证控制器,发现它们使用了一种叫做“Guards”的东西。到目前为止,每当我创建自己的登录/注册表单时,我从未接触过这些,通常只会做以下事情:
Auth::attempt()
没有任何类型的警卫。我已经尝试查找它到底是什么,但我找不到任何关于它的信息,有人可以向我解释一下守卫的目的是什么吗?
【问题讨论】:
标签: php laravel authentication
我查看了内置的身份验证控制器,发现它们使用了一种叫做“Guards”的东西。到目前为止,每当我创建自己的登录/注册表单时,我从未接触过这些,通常只会做以下事情:
Auth::attempt()
没有任何类型的警卫。我已经尝试查找它到底是什么,但我找不到任何关于它的信息,有人可以向我解释一下守卫的目的是什么吗?
【问题讨论】:
标签: php laravel authentication
它们是系统应如何存储和检索用户信息的定义。
您可以在config/auth.php 文件中找到配置。 Web Guard 是传统的 cookie 存储 - 因此 Web Guard 指示 Laravel 以经典方式存储和检索会话信息。另一方面,API 守卫使用令牌。因此,如果您想使用标头(承载)或查询参数中的 API 令牌对用户和请求进行身份验证,则可以使用 API 防护。
如果你愿意,你也可以create your own guard,还有一个很好的介绍性blog post Matt Stauffer 的主题。
【讨论】:
$this->preventMinorsGuard();。可以这样用吗?
由于我有同样的问题,而其他答案没有提供我正在寻找的信息(他们完美地解释了警卫的作用,但不是为什么你应该担心调用它的方法),我会提供另一个答案。
我也不确定 auth() 助手提供的方法和守卫本身 auth()->guard() 提供的方法之间的区别,因为它们似乎做的一样。
快速的dd(auth()) 表明它返回了AuthManager 的一个实例。所以我们可以在the source code 中查找该类:在AuthManager.php 的底部有一个__call() magic method,它将所有未定义的调用转发到它自己的guard() 方法。 p>
public function __call($method, $parameters)
{
return $this->guard()->{$method}(...$parameters);
}
这清楚地告诉我们auth()和auth()->guard()的方法不仅看起来做的一样,而且完全一样。所以只要使用默认守卫,额外的->guard()就可以省去,省心。
【讨论】:
守卫是一种提供用于识别经过身份验证的用户的逻辑的方法。 Laravel 提供了不同的守卫,比如会话和令牌。会话守卫通过 cookie 在每个请求中维护用户的状态,另一方面,令牌守卫通过检查每个请求中的有效令牌来对用户进行身份验证。
【讨论】:
Guard 角色是验证路由
【讨论】: