我正在查看内置的身份验证控制器,我注意到它们使用了一种名为“Guards”的东西。到目前为止,每当我自己制作登录/注册表单时,我从未接触过这些,通常只会做类似的事情:
Auth::attempt()
没有任何类型的警卫。我尝试查找它到底是什么,但我找不到任何相关信息,有人可以向我解释一下守卫的目的是什么吗?
由于我有同样的问题,并且其他答案没有为我提供我正在寻找的信息(它们完美地解释了守卫的作用,但没有解释为什么您应该担心调用其方法),我将提供另一个答案。
我也不确定
auth()
助手提供的方法和守卫本身 auth()->guard()
提供的方法之间的区别,因为它们似乎做同样的事情。
快速查看
dd(auth())
显示它返回 AuthManager
的实例。所以我们可以在源代码中查找该类:在AuthManager.php的底部有一个__call()
神奇方法,它将所有未定义的调用转发到它自己的guard()
方法。
public function __call($method, $parameters)
{
return $this->guard()->{$method}(...$parameters);
}
这清楚地向我们表明,
auth()
和auth()->guard()
的方法不仅看起来相同,而且完全相同。所以只要使用默认的守卫,就可以放心省略额外的->guard()
。
Guard的作用是验证路由
Laravel Guards:多级访问控制机制
Laravel 中的 Guards 提供了强大而灵活的机制来在应用程序中实现多级访问控制。它们允许您定义如何对用户进行身份验证、处理不同的用户角色,并确保根据用户类型或上下文安全访问应用程序的特定部分。
这在您的应用程序具有多个级别的用户(例如管理员、编辑者和普通用户)的情况下特别有用,或者在多租户的情况下(每个租户都有自己的身份验证逻辑)。
Laravel 中的守卫如何工作 守卫定义如何管理给定请求的身份验证。默认情况下,Laravel 提供了两个主要的守卫:
Web Guard:使用会话和 cookie 进行状态身份验证,非常适合 Web 应用程序。 API Guard:利用令牌进行无状态身份验证,通常用于基于 API 的应用程序。