【问题标题】:127.0.0.1 redirected you too many times. ERR_TOO_MANY_REDIRECTS Laravel 8127.0.0.1 重定向您的次数过多。 ERR_TOO_MANY_REDIRECTS Laravel 8
【发布时间】:2021-09-24 07:39:42
【问题描述】:

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

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
];

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

【问题讨论】:

    标签: php laravel routes middleware laravel-8


    【解决方案1】:

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

    禁用 role 中间件

    快速解决方案:

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

    正确解决方案:

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

    【讨论】:

    • 你的意思是“$request->path()”吗??
    • 我应该在哪里添加它
    • 在你的中间件中作为第一条语句
    • 但我需要员工访问“employee/con-reg”一次
    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2020-08-22
    • 2020-01-03
    • 2021-09-29
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多