首页 > 解决方案 > 如何使用 Laravel 中间件修复 ERR_TOO_MANY_REDIRECTS?

问题描述

我正在使用 Laravel 8,当我从中间件重定向路由时,我遇到了 ERR_TOO_MANY_REDIRECTS问题。我正在使用firebase otp验证用户并设置cookie如果otp验证然后我想重定向注册页面如果用户在db中不存在。我已经创建了中间件并检查是否设置了 cookie 然后重定向到注册路由。

 public function handle(Request $request, Closure $next)
{
    if (Cookie::get('otpVerified')){
        return redirect()->route('register');
    }

    return $next($request);
}

之后我面临这个问题 在此处输入图像描述 我的路线文件是

Route::get('/register', [RegisterController::class, 'register'])->name('register_user');
Auth::routes();
Route::group(['middleware' => 'otpVerify'], function (){
Route::get('/404', [\App\Http\Controllers\ErrorController::class, 'notFound'])->name('404');
Route::get('/', [\App\Http\Controllers\Dashboard\DashboardController::class, 'index'])->name('dashboard');
});

我该如何解决。我的内核文件是

 protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

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,
    'otpVerify' =>  \App\Http\Middleware\OTPVarification::class,
];

标签: laravel

解决方案


在本节中,您必须排除寄存器根

 public function handle(Request $request, Closure $next)
 {
     if (Cookie::get('otpVerified') &&  $request->route()->getActionName() !== 'YourRegisterAction'){
         return redirect()->route('register');
     }
     return $next($request);
 }

推荐阅读