Как перенаправить на страницу регистрации, если otp проверен, иначе перенаправить на логин Laravel?

Я использую Laravel 8 и Firebase для проверки мобильных устройств с помощью OTP. Теперь я хочу, чтобы, если OTP проверен, я мог получить доступ к странице регистрации, если OTP не проверен, а затем перенаправить на страницу входа. Теперь я использую регистрационную форму Laravel по умолчанию, и когда OTP проверен, я сохраняю его в файле cookie. Я создал промежуточное программное обеспечение, но оно не работает, если файл cookie не установлен, тогда я также получаю доступ к регистрации, но я не хочу, чтобы он был доступен. Код промежуточного программного обеспечения,

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

Код ядра,

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

веб-файл,

Route::get('language/{key}', [SwitchLanguageController::class,  'switchLanguage'])->name('language');


Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register')->middleware(['otpVerify']);

Auth::routes();
Route::group(['middleware' => 'auth'], function (){

Route::get('/404', [\App\Http\Controllers\ErrorController::class, 'notFound'])->name('404');
Route::get('/', [\App\Http\Controllers\Dashboard\DashboardController::class, 'index'])->name('dashboard');
});

как я могу решить эту проблему.


person Irshad Khan    schedule 30.12.2020    source источник
comment
вы можете создать ящик flash session   -  person Kamlesh Paul    schedule 30.12.2020
comment
Тогда как я могу использовать его, вы можете сказать мне больше спасибо.   -  person Irshad Khan    schedule 30.12.2020
comment
добавьте otpVerified маршрут и контроллер, чтобы я мог с этим помочь   -  person Kamlesh Paul    schedule 30.12.2020


Ответы (1)


Маршрут, который вы определяете в файле web.php, который использует промежуточное ПО otpVerify, перезаписывается маршрутами пакета laravel/ui в Auth::routes();

Проверьте свои маршруты с помощью php artisan route:list.

Вам нужно переместить определение маршрута register ниже Auth::routes().

Auth::routes();

Route::get('register', [RegisterController::class, 'showRegistrationForm'])
    ->name('register')
    ->middleware(['otpVerify']);
person Peppermintology    schedule 30.12.2020
comment
Как я могу это сделать, не могли бы вы объяснить больше? - person Irshad Khan; 13.01.2021
comment
@IrshadKhan Я добавил пример в свой ответ. - person Peppermintology; 13.01.2021
comment
Эта страница не работаетwww.ereciept.com перенаправлял вас слишком много раз. Попробуйте очистить куки. ERR_TOO_MANY_REDIRECTS - person Irshad Khan; 13.01.2021
comment
Получение этой проблемы - person Irshad Khan; 13.01.2021
comment
Похоже, вы находитесь в режиме перенаправления. Можете ли вы опубликовать свои web.php маршруты в своем вопросе? - person Peppermintology; 13.01.2021
comment
Спасибо, я сделал это. я применил промежуточное ПО в контроллере regsiter и изменил кодирование промежуточного ПО следующим образом: `if (Cookie::get('otpVerified')){ return $next($request); } вернуть redirect()-›route('логин');` - person Irshad Khan; 14.01.2021