laravel - 如何使用 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,
];
解决方案
在本节中,您必须排除寄存器根
public function handle(Request $request, Closure $next)
{
if (Cookie::get('otpVerified') && $request->route()->getActionName() !== 'YourRegisterAction'){
return redirect()->route('register');
}
return $next($request);
}
推荐阅读
- php - PHP - 检查时间是否在 22:00 和 02:00 之间
- php - Laravel 数据透视表关系
- swift - 继承和构造函数。在 super.init 之前自用
- css - css手风琴与选中的单选按钮冲突
- electron - electron.clipboard.readText() 返回空字符串
- python - 有没有办法让 qtimer 等到一个函数完成?
- ios - 如何用集合视图替换表格视图?
- apache-spark - 如何将字符串映射到序列
在 Java 中的 Spark - node.js - 在 Azure Blob 存储中上传图像时出现问题
- oracle - Oracle Application Express 显示从 oracle 表中删除的数据