2017-02-14 88 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

如果您使用我的解决方案,则必须注意每个登录表单中发生的情况取决于经过身份验证的用户角色。