我有一个auth的中间件组,我希望将另一个中间件应用于该视图中的一个特定路由,即如果配置文件未完成,则用户无法转到任何其他路由,直到他完成其配置文件并提交。
更具体地说,中间件正在导致重定向循环,因为我有2个中间件。
我用laravel php artisan创建了中间件,并检查用户是否配置文件不完整,他应该重定向到配置文件/编辑页面,但它甚至不能只检查不完整的空公司名称。
Middlware
class incompleteProfile
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(empty(Auth::user()->details['companyname'])){
return redirect()->route('profile');
}
return $next($request);
}
}
路线档案
Routes
Route::group(['middleware'=>['auth'] ], function(){
// User Profile
Route::get('/profile/edit', 'UserController@profile')->name('profile')->middleware('incompleteProfile');
Route::post('/profile/edit', 'UserController@editProfile')->name('editProfile');
答案 0 :(得分:3)
如果您将该中间件放在profile
路由上......他们如何才能到达profile
路由以获取表单来更新配置文件以添加缺少的信息?
您说...如果公司名称的用户详细信息为空,则重定向到profile
,但您在profile
上有中间件......所以它将永远重定向到{{ 1}}因为中间件告诉它。在这种情况下,您的用户永远无法访问profile
。
这相当于将profile
中间件分配到auth
页面。 auth中间件检查用户当前是否已通过身份验证。这意味着如果用户未经过身份验证,他们将永远无法访问login
,在这种情况下,因为login
要求他们登录"。
答案 1 :(得分:0)
lagbox的回答几乎说明了为什么它不起作用的逻辑。 试试吧。
Route::group(['middleware'=>['auth'] ], function(){
// User Profile
Route::get('/profile/edit', 'UserController@profile')->name('profile');
Route::group(['middleware'=>['incompleteProfile'] ], function(){
Route::post('/profile/edit', 'UserController@editProfile')->name('editProfile');
//ETC
});
});