Php 如何使用相同的方法为相同的路由使用不同的可选中间件
我在同一Php 如何使用相同的方法为相同的路由使用不同的可选中间件,php,laravel,laravel-5.7,Php,Laravel,Laravel 5.7,我在同一/路线上应用不同的中档时遇到问题。例如 Route::get('/', 'HomeController@index')->name('home')->middleware('usertype'); public function handle($request, Closure $next) { if (auth()->check() AND auth()->user()->type != 1) { return $next($re
/
路线上应用不同的中档时遇到问题。例如
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.');
}
Route::get('/', 'HomeController@index')->name('home'); //removed middleware
在我的项目中,我使用了url()->previous()
这是因为如果用户没有登录某些页面,那么他/她必须在几次搜索或访问几页后登录。因此,当用户登录时,必须将该用户重定向回上一个url
实际上,/
无论用户是否登录,这条路线都很少提供服务。但登录后,我想检查用户是否是管理员,然后他必须受到限制,因为这是一个前端应用程序。但是,每当我登录时,它都会将我重定向到/
路由,因为url()->previous()
,而我无法将中间件应用于此路由,因为它是一个来宾路由,没有身份验证。
因此,实际的问题是,我如何使这条路线对于多个中间件是可选的?或任何其他建议将不胜感激。谢谢
路线
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.');
}
Route::get('/', 'HomeController@index')->name('home'); //removed middleware
中间件
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.');
}
Route::get('/', 'HomeController@index')->name('home'); //removed middleware
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));
}
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 ) );
}
昨天上传了我的问题后,我还没有收到任何答案。但是,如果有人能从我这里得到帮助,或者有人能更清楚地帮助我,那么让我与你们分享我为这个场景所做的一切 路线
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.');
}
Route::get('/', 'HomeController@index')->name('home'); //removed middleware
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));
}
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 ) );
}
我不知道这是否是最好的方法,但我现在已经这样做了,没有使用任何中间件