如何使用相同的方法对相同的路由使用不同的可选中间件
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 ) );
}
不知道是不是最好的方式,暂时没有使用任何中间件就这么干了
我在同一 /
路径上应用不同的中间件时遇到问题。例如
在我的项目中,我使用了 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 ) );
}
不知道是不是最好的方式,暂时没有使用任何中间件就这么干了