【问题标题】:Check if Auth has a certain middleware检查Auth是否有某个中间件
【发布时间】:2018-01-08 10:41:57
【问题描述】:

向路由添加中间件时,访问者需要“通过”该中间件,然后访问者才能看到结果页面。
我想知道我是否以及如何检查用户理论上是否会传递任意中间件(他当前的请求不需要)

我有 3 个中间件 123

我的路由启用了中间件12,我将如何检查用户是否会通过中间件3

【问题讨论】:

  • 添加更多细节,你的意思是如何检查路由是否有某些中间件?
  • 我已经说得很清楚了。我想检查访问者是否在视图中有中间件。我从来没有提到任何关于路线的事情?
  • 视图中没有中间件之类的东西。
  • 如果用户已经到达视图,你就知道他通过了中间件。
  • 你不能。这不是中间件的用途。 “中间件提供了一种方便的机制来过滤进入您的应用程序的 HTTP 请求”。阅读docs

标签: php laravel


【解决方案1】:

这是你可以做的,你可以声明一个函数来检查你的中间件最初会检查什么,如下所示

public function passesTest() {
    return true; // check something here
}

然后您应该能够使用以下代码检查用户是否通过它,该函数可以在中间件和您的视图中访问。

if (Auth::passesTest()) {
    // do something
}

这样,如果你想修改它,你只需要在一个地方改变它。

【讨论】:

  • 如果 Laravel 推送更新并且你运行 composer update 怎么办?代码会丢失。
  • @DeesOomens 如果您使用自定义 Auth 类,则不会。
【解决方案2】:

正如其他用户试图在 cmets 中向您解释的那样,中间件不是解决此问题的合适工具。中间件用于在任何给定请求到达任何视图之前对其进行检查。

您可以使用custom guard,这将使您能够按照@distribut0n 的建议使用身份验证检查。

在这个自定义的身份验证保护中,您可以使用Request 外观来访问必要的信息,当然您可以使用Auth::user() 获取更多信息,这两项的组合应该使您能够检查几乎所有可能的信息请求。

为了防止重复代码,最好只在自定义保护中声明逻辑并使用它来检查中间件。

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多