Laravel 5.3 : 重定向你太多次错误

Laravel 5.3 : redirected you too many times error

我在尝试导航到“/admin”时遇到此错误。 “/employee”等其他路由工作正常。

这是我当前的网络路由

Auth::routes();

/* Voyager Routes */
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
...
});

/* Badge App Routes - All the dashboard routes for managers, employees and HRs are defined here */
Route::group(['middleware' => 'auth', 'prefix' => 'employee'], function () {
  Route::get('/', 'frontend\DashboardController@index')->name('homepage');
  Route::get('dashboard', 'frontend\DashboardController@index')->name('homepage');
  ...
});

Route::group(['middleware' => 'auth'], function () {
  Route::resource('team-manager', 'frontend\TeamManagerController');

  Route::resource('badges', 'backend\BadgeController');
  Route::get('badges/award/{id?}', 'backend\BadgeController@award');
  Route::post('store_award', 'backend\BadgeController@storeAward')->name('store_award');
});

/* User Redirector - Based on user role */
Route::group(['middleware' => ['redirector']], function () {
    Route::get('/');
    Route::get('login');
});

这是我的中间件重定向器

public function handle($request, Closure $next){
    if (!Auth::guest()) {
        $user = User::find(Auth::id());
        // TODO: fix static id below
        return $user->role_id == 1 ? redirect('admin') : redirect('employee');
    }
    return redirect(route('voyager.login'));
}

提前致谢!

问题出在你的中间件上:

return $user->role_id == 1 ? redirect('admin') : redirect('employee');

您具有管理员角色,并且您也在 /admin 页面中。然后你的中间件一次又一次地将你重定向到 /admin.

最好检查用户是否不在/admin/admin/*相关路由中,然后将其重定向到admin。

if($user->role_id == 1) {

    //check if user is in /admin or /admin related routes.
    return ($request->is('/admin') or $request->is('/admin/*')) ? $next($request) : redirect('admin');

} else {
    redirect('/employee');
}