【发布时间】:2018-05-28 17:19:42
【问题描述】:
我有一个中间件组,我想将另一个中间件应用到该视图中的一个特定路径,即如果配置文件未完成,用户在完成他的配置文件并提交之前无法转到任何其他路径。
更具体地说,中间件导致重定向循环,因为我有 2 个中间件。
我使用 laravel php artisan 创建了中间件,并检查用户是否个人资料不完整,他应该重定向到个人资料/编辑页面,但它甚至不能仅检查不完整的空公司名称。
中间件
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');
【问题讨论】:
-
您的 if 语句中有错误。它应该是
if(Auth::user()->details['companyname'] == ""){...},没有empty()。如果公司名称是用户的直接属性,您可以写if(Auth::user()->companyname == ""){...} -
另外你必须在
app/Http/kernel.php(laravel.com/docs/5.5/middleware#registering-middleware)中注册你的中间件 -
我的中间件已注册,但当条件匹配时,它会一次又一次地重定向,然后浏览器崩溃
-
if(empty(Auth::user()->details['companyname']) 这个东西现在可以工作了,但是它一次又一次地重定向,浏览器给你这个错误重定向了太多次。
-
另一个问题可能是,您的编辑页面只能通过 POST 访问。所以每个重定向都进入 Route::get() 而不是 Route::post()。您应该将您的第一条路线(受保护的路线)重命名为
/profile。你的编辑路线应该是Route::match(['post','get'],'/profile/edit','UserController@editProfile')。在您的控制器中,您必须检查当前方法是 post 还是 get 并返回带有编辑表单的视图或处理表单输入。
标签: php laravel middleware