如何使用中间件要求中间件?

Posted

技术标签:

【中文标题】如何使用中间件要求中间件?【英文标题】:How to require middleware with a middleware? 【发布时间】:2015-10-11 17:34:31 【问题描述】:

我创建了一个中间件,比如说 AuthenticateAdmin,并在 Kernel.php 中添加了代码:

'auth_admin' => \App\Http\Middleware\AuthenticateAdmin::class,

在我的路线中,我有这个代码:

Route::group(['middleware' => 'auth_admin'], function () 
    // Admin routes here
);

在我的 AuthenticateAdmin.php 中有这段代码”

<?php namespace App\Http\Middleware;

use Auth;
use Closure;
use Illuminate\Contracts\Auth\Guard;

class AuthenticateAdmin 

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        // Perform action here

        return $next($request);
    


我想做的是每次我使用中间件“auth_admin”时,在进入“auth_admin”中间件之前,我希望它首先执行“auth”中间件。

【问题讨论】:

【参考方案1】:

您可以尝试使用依赖注入,在构造函数中您应该放置auth 中间件,然后执行auth_admin 的操作

<?php

namespace App\Http\Middleware;

use Auth;
use Closure;
use Illuminate\Contracts\Auth\Guard;

class AuthenticateAdmin 
    /**
     * Create a new authentication controller instance.
     */
    public function __construct()
    
        $this->middleware('auth');
    

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        // Perform action here

        return $next($request);
    


还有一件事,记得遵循 PSR-2 标准,将命名空间放在下一行,就像我在示例中所做的那样。

【讨论】:

【参考方案2】:

我不确定您为什么需要这样做。但在 Laravel 中,我认为您可以进行如下配置以使其正常工作:

Route::group(['middleware' => ['auth','auth_admin']], function () 
    // Admin routes here
);

【讨论】:

以上是关于如何使用中间件要求中间件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用中间件以惯用方式记录身份验证信息

我怎么忽略了身份框架魔法,只是使用OWIN验证的中间件,以获得要求我寻求什么呢?

如何使 getx 颤振以移动到下一个中​​间件

如何LoadRunner进行中间件的性能测试

带有 IntputLabel 和 Input 的 Material UI 网格放置在水平行中:如何要求垂直对齐位于标签的中间?

如何使用 express 中间件处理类型?