首页 文章

Laravel多个中间件导致重定向循环

提问于
浏览
0

我有一个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 回答

  • 3

    如果你把这个中间件放在 profile 路线上...他们怎么能到达 profile 路线来获取表格来更新配置文件以添加缺少的信息?

    您说...如果公司名称的用户详细信息为空,则重定向到 profile ,但您在 profile 上有该中间件...所以它将永远重定向到 profile 因为中间件告诉它 . 在这种情况下,您的用户永远无法访问 profile .

    这相当于将 auth 中间件分配给 login 页面 . auth中间件检查用户当前是否已通过身份验证 . 这意味着如果用户未经过身份验证,他们将永远无法访问 login ,在这种情况下,因为 login 要求他们是"logged in" .

  • 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
        });
    
    });
    

相关问题