如何使用相同的方法对相同的路由使用不同的可选中间件

How to use different optional middlewares for same route using same method

我在同一 / 路径上应用不同的中间件时遇到问题。例如

在我的项目中,我使用了 url()->previous(),这是因为如果用户未登录某些页面,那么 he/she 必须在几次搜索或访问几页后登录。因此,当用户登录时,必须将该用户重定向回之前的 url.

实际上/这条路线有很少的服务可用于判断用户是否登录。但是登录后,我想检查用户是否是管理员,然后他必须受到限制,因为它是一个前端应用程序。但是每当我登录时,由于 url()->previous(),它会将我重定向到 / 路由,并且我无法在该路由上应用我的中间件,因为它是访客路由而不是 auth。 所以实际的问题是,我怎样才能让这个路由对于多个中间件是可选的?或者任何其他建议将不胜感激。谢谢

路线

Route::get('/', 'HomeController@index')->name('home')->middleware('usertype');

中间件

public function handle($request, Closure $next)
{
    if (auth()->check() AND auth()->user()->type != 1) {
        return $next($request);
    }
    auth()->logout();
    return redirect(route('login'))->with('error','Admin can not login to frontend.');
}

AuthenticatesUsers.php

public function showLoginForm()
{
    if(!session()->has('from')){
        session()->put('from', url()->previous());
    }
    return view('auth.login');
}

protected function authenticated(Request $request, $user)
{
    Session::put('name',$user->userDetail);
    return redirect(session()->pull('from',$this->redirectTo));
}

昨天上传了我的问题后,我还没有收到任何答复。但是我为这个场景做了什么让我与你分享,如果任何人都可以得到帮助或者任何人可以帮助我更清楚地了解它。

路线

Route::get('/', 'HomeController@index')->name('home'); //removed middleware

AuthenticatesUsers.php

protected function authenticated(Request $request, $user)
{
   //If the user is admin he can't login to frontend application
    if ( $user->type == 1){
        auth()->logout();
        return redirect(route('login'))->withError('Admin can not login to frontend.');
    }

    session()->put( 'name', $user->userDetail);
    return redirect( session()->pull( 'from', $this->redirectTo ) );
}

不知道是不是最好的方式,暂时没有使用任何中间件就这么干了