【问题标题】:Laravel What is a guard?Laravel 什么是守卫?
【发布时间】:2016-04-26 01:37:51
【问题描述】:

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

Auth::attempt()

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

【问题讨论】:

    标签: php laravel authentication


    【解决方案1】:

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

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

    如果你愿意,你也可以create your own guard,还有一个很好的介绍性blog post Matt Stauffer 的主题。

    【讨论】:

    • 守卫也可以保护任何事物。就像防止小额购买股票出现在事件中一样:$this->preventMinorsGuard();。可以这样用吗?
    【解决方案2】:

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

    我也不确定 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()就可以省去,省心。

    【讨论】:

      【解决方案3】:

      守卫是一种提供用于识别经过身份验证的用户的逻辑的方法。 Laravel 提供了不同的守卫,比如会话和令牌。会话守卫通过 cookie 在每个请求中维护用户的状态,另一方面,令牌守卫通过检查每个请求中的有效令牌来对用户进行身份验证。

      【讨论】:

        【解决方案4】:

        Guard 角色是验证路由

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

        【讨论】:

          猜你喜欢
          • 2017-11-27
          • 2016-07-30
          • 1970-01-01
          • 2019-09-30
          • 1970-01-01
          • 2017-01-29
          • 2015-03-04
          • 2021-10-22
          • 1970-01-01
          相关资源
          最近更新 更多