我有一个auth中间件组,我希望将另一个中间件应用于该视图中的一个特定路由,如果配置文件未完成,用户无法转到任何其他路由,直到他完成其配置文件并提交 .
More Specifically, middle ware is causing loop on redirect because i have 2 middleware.
我用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 File
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');
2 回答
如果你把这个中间件放在
profile
路线上...他们怎么能到达profile
路线来获取表格来更新配置文件以添加缺少的信息?您说...如果公司名称的用户详细信息为空,则重定向到
profile
,但您在profile
上有该中间件...所以它将永远重定向到profile
因为中间件告诉它 . 在这种情况下,您的用户永远无法访问profile
.这相当于将
auth
中间件分配给login
页面 . auth中间件检查用户当前是否已通过身份验证 . 这意味着如果用户未经过身份验证,他们将永远无法访问login
,在这种情况下,因为login
要求他们是"logged in" .lagbox回答几乎说出了为什么它不起作用的逻辑 . 试试吧 .