具有中间件的多步注册表格,并导致无限循环



我正在尝试编写一个多步注册表格,其中第一个form登记用户和以下单是完整的用户详细信息(单独的页面)。我的目标是允许用户(通过错误或故意)在注册第一个表单后退出,允许他们以后登录并将其设置为关闭的位置。

我添加了一个数据库表" register_steps"以确定用户完成的页面,然后我尝试将这些数据拉到中间件中并适当地重定向。

看来我在Auth的Redirectto和我的登记册的重定向中间件之间发生了无限的环路冲突。

中间件

namespace AppHttpMiddleware;
use Closure;
use IlluminateSupportFacadesAuth;
class CompleteRegistration
{
    /**
     * Redirect user if profile is not complete
     *
     * @param  IlluminateHttpRequest  $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', 'AuthLoginController@showLoginForm')->name('login');
Route::post('login', 'AuthLoginController@login');
Route::post('logout', 'AuthLoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'AuthRegisterController@showRegistrationBasic')->name('register.basic');
Route::post('register', 'AuthRegisterController@registerBasic');
Route::get('register/profile', 'AuthRegisterController@showRegistrationProfile');
Route::post('register/profile', 'AuthRegisterController@showRegistrationProfile');
Route::get('register/photo', 'AuthRegisterController@showRegistrationPhoto');
Route::post('register/photo', 'AuthRegisterController@showRegistrationPhoto');
// Password Reset Routes...
Route::get('password/reset', 'AuthForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'AuthForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'AuthResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'AuthResetPasswordController@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' => IlluminateAuthMiddlewareAuthenticate::class,
    'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
    'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
    'can' => IlluminateAuthMiddlewareAuthorize::class,
    'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
    'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
    'register' => AppHttpMiddlewareCompleteRegistration::class
];

我最终将额外表单分开为另一个控制器而不是寄存器controller,因此它不会重定向,然后在我的OP中使用中间件来检查DB,以查看是否表单是否表单已完成(如果不是的话)重定向到未完成的表格。

最新更新