Как использовать разные необязательные промежуточные программы для одного и того же маршрута с помощью одного и того же метода - PullRequest
1 голос
/ 16 июня 2020

У меня проблема с применением разных промежуточных программ к одному и тому же маршруту /. Например,

В моем проекте я использовал url()->previous(), потому что, если пользователь не вошел в систему на некоторых страницах, он / она должен войти в систему после нескольких поисков или посещения нескольких страниц. Поэтому, когда пользователь вошел в систему, этот пользователь должен быть перенаправлен обратно на предыдущий URL-адрес.

Фактически / этот маршрут имеет несколько служб, доступных независимо от того, вошел ли пользователь в систему или нет. Но после входа в систему я хочу проверить, является ли пользователь администратором, тогда он должен быть ограничен, потому что это интерфейсное приложение. Но всякий раз, когда я вошел в систему, он перенаправляет меня на маршрут / из-за url()->previous(), и я не могу применить свое промежуточное ПО на этом маршруте, потому что это гостевой маршрут, а не авторизация. Итак, актуальный вопрос: как сделать этот маршрут необязательным для нескольких промежуточных программ? Или любое другое предложение будет оценено. Спасибо

Route

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

Middleware

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

1 Ответ

0 голосов
/ 17 июня 2020

После того, как вчера я загрузил свой вопрос, я еще не получил ответа. Но что я сделал для этого сценария, позвольте мне поделиться с вами, если кто-то может получить помощь или кто-то может помочь мне более четко в этом.

Маршрут

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

Я не знаю, лучший ли это способ, но я сделал это пока без использования промежуточного программного обеспечения

...