Laravel 什么是守卫?

问题描述 投票:0回答:4

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

Auth::attempt()

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

php laravel authentication
4个回答
119
投票

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

您可以在

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

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


18
投票

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

我也不确定

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

快速查看

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

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

这清楚地向我们表明,

auth()
auth()->guard()
的方法不仅看起来相同,而且完全相同。所以只要使用默认的守卫,就可以放心省略额外的
->guard()


8
投票

Guard的作用是验证路由

  1. Web Guard 将验证 Web 路由
  2. Api Guard 将验证 api 路由。
  3. 对于其他用户类型,例如管理员警卫将验证管理路由等。

0
投票

Laravel Guards:多级访问控制机制

Laravel 中的 Guards 提供了强大而灵活的机制来在应用程序中实现多级访问控制。它们允许您定义如何对用户进行身份验证、处理不同的用户角色,并确保根据用户类型或上下文安全访问应用程序的特定部分。

这在您的应用程序具有多个级别的用户(例如管理员、编辑者和普通用户)的情况下特别有用,或者在多租户的情况下(每个租户都有自己的身份验证逻辑)。

Laravel 中的守卫如何工作 守卫定义如何管理给定请求的身份验证。默认情况下,Laravel 提供了两个主要的守卫:

Web Guard:使用会话和 cookie 进行状态身份验证,非常适合 Web 应用程序。 API Guard:利用令牌进行无状态身份验证,通常用于基于 API 的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.