从 $request 获取请求的中间件列表?

问题描述

在我用 Laravel 8 创建的项目中,使用 vue+inertia+fortify 包,我使用了两个守卫,一个给普通用户一个管理员。但只有一个登录视图重定向

我只想向普通用户显示不同的登录名,向管理员显示一个登录名。它应该由路由中使用的中间件检测。我可以过滤它,如果我能从那里得到请求的警卫姓名。

这是我的示例路线:

<?PHP
//'auth:users' is normal users guard

 Route::group(['middleware' => 'auth:users'],function () {
            Route::prefix('/account')->name('account.')->group(function () {
                Route::get('/',[AccountController::class,'index'])->name('index');
});});

//'auth:web' is admin users guard

 Route::group(['middleware' => 'auth:web'],function () {
      Route::prefix('/admin')->name('admin.')->group(function () {
            Route::prefix('/account')->name('account.')->group(function () {
                Route::get('/',[AdminAccountController::class,'index'])->name('index');
   });
 });
});

身份验证中间件:

<?PHP

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        // both request coming to here i want get middlware name from here
   //       if('auth:web'){
 //redirect to adimin login
 //         }else{
 //redirect to userlogin
 //}

       
        if (! $request->expectsJson()) {
            return route('admin.login');
        }
    }
}

解决方法

您可以使用 request()->route()->computedMiddleware 获取用于当前路由的所有中间件的列表,因此您的代码将是:

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if ($request->route() && in_array('auth:web',$request->route()->computedMiddleware??[]) {
         // redirect to admin login
       } else {
         // redirect to admin login
       }
 
       
        if (! $request->expectsJson()) {
            return route('admin.login');
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...