2017-02-14 126 views
0

我正在開發一箇中間件以處理訪客重定向到保護區域。我有2個登錄頁面,一個用於前端,另一個用於後端,並希望客人根據他們輸入的位置重定向到每個登錄頁面。我的意思是:Laravel 5.2 - 獲取中間件請求中的路由組名稱

  • 如果客人進入像/admin/dashboard的路線,他們必須被重定向到/admin/login
  • 如果客人輸入路線/messages,則必須將其重定向到/login

這是我的routes.php文件

Route::get('/', function() { 
    return view('inicio'); 
}); 

Route::group(['as'=>'clientRoutes', 'middleware'=>'loginSelector'], function(){ 
    Route::get('/polizas', function() { 
     return view('cliente.polizas'); 
    }); 
}); 

Route::group(['as'=>'adminRoutes','prefix'=>'admin', 'middleware'=>'loginSelector'], function(){ 
    Route::get('/inicio', function() { 
     return view('admin.inicio'); 
    }); 
    Route::get('/lista', function() { 
     return view('admin.lista'); 
    }); 
}); 
Route::get('/admin/login', function() { 
    return view('admin.login'); 
}); 

在中間件,我試圖讓路由的組名,但不能找到讓我的樣子,像這樣:

namespace App\Http\Middleware; 

use Closure; 

class CustomAuthRedirectMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $grupoRoute = $request->route()->getGroup(); 
     if($grupoRoute == "adminRoutes"){ 
      return redirect('/admin/login'); 
     }else{ 
      return redirect('/login'); 
     } 

     return $next($request); 
    } 
} 

如果可以的話,我怎樣才能把組名稱做重定向?或者如果這是不可能的,如何才能實現這種重定向?

+1

您可能會試試這個:http://stackoverflow.com/questions/36838177/how-to-define-route-group-name-in-laravel – Samsquanch

+0

@Samsquanch非常感謝。發佈它作爲答案,以便標記爲正確,並請您滿意。多數民衆贊成在我正在尋找... –

+0

你可以繼續前進,張貼完全如何解決它作爲答案,因爲我只能猜測。我認爲這將是一個更好的解決方案。只需在您的帖子中引用該鏈接即可。 – Samsquanch

回答

0

我通過@Samsquanch提供的link解決了問題。

這是中間件代碼:

public function handle($request, Closure $next) 
{ 
    $routeName = $request->route()->getName(); 
    if(strpos($routeName, 'adminRoutes.') === 0){ 
     if(!Auth::user()){ 
      return redirect('/admin/login'); 
     } 
    }elseif(strpos($routeName, 'clientRoutes.') === 0){ 
     if(!Auth::user()){ 
      return redirect('/login'); 
     } 
    } 

    return $next($request); 
} 

這些都是我的路線:

Route::group(['as'=>'clientRoutes.', 'middleware'=>'loginSelector'], function(){ 
    Route::get('/polizas', function() { 
     return view('cliente.polizas'); 
    }); 
}); 

Route::group(['as'=>'adminRoutes.','prefix'=>'admin', 'middleware'=>'loginSelector'], function(){ 
    Route::get('/inicio', function() { 
     return view('admin.inicio'); 
    }); 
    Route::get('/lista', function() { 
     return view('admin.lista'); 
    }); 
}); 
Route::get('/admin/login', function() { 
    return view('admin.login'); 
}); 

當我去到URL /admin/lista我重定向到/admin/login,而當我到/polizas我被重定向到/login

如果您使用我的解決方案,則必須注意每個登錄表單中發生的情況取決於經過身份驗證的用戶角色。