Многоэтапная форма регистрации с промежуточным ПО и аутентификацией, вызывающая бесконечный цикл

Я пытаюсь написать многоэтапную регистрационную форму, где первая форма регистрирует пользователя, а следующие формы заполняют данные пользователя (отдельные страницы). Моя цель — позволить пользователю (по ошибке или преднамеренно) выйти после регистрации первой формы, позволяя ему войти в систему позже и установить, где он остановился.

Я добавил таблицу базы данных «register_steps», чтобы определить, какую страницу завершил пользователь, затем я пытаюсь вставить эти данные в промежуточное ПО и соответствующим образом перенаправить.

Похоже, что я получаю конфликт бесконечного цикла между redirectTo Auth и промежуточным программным обеспечением моего реестра.

Промежуточное

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CompleteRegistration
{
/**
* Redirect user if profile is not complete
*
* @param  \Illuminate\Http\Request  $request
* @param  \Closure  $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::user()){
$step = Auth::user()->registration_steps;
switch ($step) {
case 1:
return redirect('/register/profile');
break;
case 2:
return redirect('/register/photo');
break;
}
}
return $next($request);
}
}

Маршруты

// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationBasic')->name('register.basic');
Route::post('register', 'Auth\RegisterController@registerBasic');
Route::get('register/profile', 'Auth\RegisterController@showRegistrationProfile');
Route::post('register/profile', 'Auth\RegisterController@showRegistrationProfile');
Route::get('register/photo', 'Auth\RegisterController@showRegistrationPhoto');
Route::post('register/photo', 'Auth\RegisterController@showRegistrationPhoto');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

// Website Pages
Route::get('/', 'WelcomeController@index')->middleware('guest');
Route::get('/browse', 'ProfileController@show')->middleware('auth', 'register');
Route::get('/profile', 'ProfileController@index')->middleware('auth', 'register');
Route::get('/profile/edit', 'ProfileController@edit')->middleware('auth', 'register');

ядро

protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'register' => \App\Http\Middleware\CompleteRegistration::class
];

1

Решение

Я закончил тем, что разделил дополнительные формы на другой контроллер, а не на RegisterController, чтобы он не перенаправлял, а затем использовал промежуточное программное обеспечение в моем OP, чтобы проверить базу данных, чтобы увидеть, были ли заполнены формы, если нет, перенаправить на незавершенный форма.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector