我正在尝试编写一个多步注册表格,其中第一个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,以查看是否表单是否表单已完成(如果不是的话)重定向到未完成的表格。