我实际上是使用spatie来担任角色和权限的,但是我有1个我无法解决的问题,它与经过身份验证的重定向中间件有关。
我在控制器中使用角色中间件来允许或拒绝基于角色的控制器访问,因此问题在于这两个中间件之间正在进行某种重定向循环,从而导致此错误:
ERR_TOO_MANY_REDIRECTS
接下来,我的代码:
web.php:
Auth::routes();
Route::get('/', ['as'=>'index', 'uses' => 'HomeController@index']);
Route::resource('Empleados', 'EmpleadosController');
Route::resource('Tipopermisos', 'TipopermisosController');
Route::resource('Tiemposcompensatorios', 'TiemposcompensatoriosController');
Route::resource('Permisos', 'PermisosController');
Route::resource('Reportes', 'ReportesController');
Route::get('listaTC', ['as'=>'listaTC', 'uses' =>'TiemposcompensatoriosController@listaTC']);
Route::get('listaP', ['as'=>'listaP', 'uses' => 'PermisosController@listaP']);
Route::get('searchBar', ['as'=>'searchBar', 'uses' => 'PermisosController@searchBar']);
Route::get('generalReport', ['as'=>'generalReport', 'uses' =>'ReportesController@generalReport']);
HomeController:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return redirect()->route('Empleados.index');
}
}
RedirectIfAuthenticated.php:
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
}
最后,我的EmpleadosController whit索引方法是登录名应重定向到的那个方法,我的构造函数用来验证用户是否具有访问控制器的权限:
public function __construct()
{
$this->middleware(['role:superadmin|admin']);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$data = strtoupper($request->buscar);
if( strlen($data) >3){
$empleados = Empleado::where('nombre', 'LIKE', "%{$data}%")->paginate(10);
}
else{
$empleados = Empleado::paginate(10);
}
if ($request->ajax()) {
return view('empleados.list', compact('empleados'))->render();
}
return view('empleados.index',compact('empleados'));
}
从每次用户登录到redirectifauthenticated中间件运行时的这种行为中我可以看到,这导致我进入家庭控制器中的index方法,该方法将我重定向到EmpleadosController并再次运行角色中间件,同时再次运行角色中间件redirectifauthenticated中间件,由于这个问题,我陷入了这种重定向循环中!
如果我从控制器中删除角色中间件,它将起作用:|
我将上传您要求的所有所需代码,希望您能为我提供帮助!谢谢。