首页 > 解决方案 > 127.0.0.1 重定向您的次数过多。ERR_TOO_MANY_REDIRECTS Laravel 8

问题描述

我想管理路由中的授权,所以我创建了一个名为“角色”的中间件这是角色中间件处理函数:

public function handle(Request $request, Closure $next)
{
    $role = Auth::user()->role_id;
    $emp_id = Auth::user()->employee_id;
    $clt_id = Auth::user()->client_id;
    if ($role == 3745639763)
    {
        return $next($request);

    } else if ($role == 1 && $emp_id == NULL)
    {
       return redirect('employee/con-reg');

    } else if ($role == 2 && $clt_id == NULL)
    {

        return $next($request);

    } else if ($role == 1 && $emp_id != NULL)
    {

        return redirect('client/con-reg');

    } else if ($role == 2 && $clt_id != NULL)
    {

        return $next($request);

    }
}

这是我给员工的路线:

Route::group([
'prefix'=> 'employee',
'middleware' => 'role',
'as' => 'employee.'
], function () {
    Route::get('/con-reg', function () {
        $works = Work::all();
        return view('employee/con-register', compact('works'));
    })->name('con-reg');

    Route::post('/store', [EmployeeController::class, 'store'])->name('store');
    Route::post('/profile', [EmployeeController::class, 'index'])->name('index');
});

这是主页路径,登录或注册后,您将被重定向到主页,这也是我放置中间件的地方,因为他可以在继续注册后访问主页,并为我们提供他选择的角色所需的更多信息:

Route::view('/home', 'home')->middleware('role');

这是Kernal.php文件:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'emp' => \App\Http\Middleware\emp::class,
    // 'clt' => \App\Http\Middleware\clt::class,
    'role' => \App\Http\Middleware\role::class, //<------This is My Middleware
];

所以现在当我登录时,它并没有将我重定向到注册视图,而是上面的错误出现在我面前。

标签: phplaravelroutesmiddlewarelaravel-8

解决方案


这是因为路由employee/con-reg受此中间件保护。重定向后-您进入循环检查->重定向您需要为路由employee/con-reg禁用角色中间件

快速解决方案:

if ($request->path() === 'employee/con-reg'){
   return $next($request);
}

正确的解决方案:

将此操作放在控制器中(不是在闭包中,这是不好的做法)并为其禁用中间件


推荐阅读