Получить запрошенный список промежуточного программного обеспечения из $ 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');
   });
 });
});

промежуточное ПО auth:

<?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');
        }
    }
}

person vidur    schedule 23.02.2021    source источник


Ответы (1)


Вы можете получить список всего промежуточного программного обеспечения, используемого для текущего маршрута, используя 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');
        }
    }
}
person apokryfos    schedule 31.03.2021
comment
computedMiddleware полезно большое спасибо! - person vidur; 31.03.2021