Laravel Middleware - 如何在控制器方法中执行?

时间:2016-06-03 18:57:05

标签: php laravel-5

我对同一个网址使用多个视图,具体取决于用户是否登录..所以mywebsite.com的路由如下:

Route::get('/', 'HomeController@redirector')->name('home');

控制器是:

public function redirector(){

    if(!\Auth::check()){
        return view('welcome'); 
    }
    else{
        return $this->index();
    }

}

现在,当它运行索引功能时,我需要它来运行中间件' auth',它会更新并检查用户。问题是,我不能将它附加到路由,因为它们可能未被记录导致重定向循环。我试过这个:

public function redirector(){

    if(!\Auth::check()){
        return view('welcome'); 
    }
    else{
        $this->middleware('auth');
        return $this->index();
    }

}

它不运行中间件。

如果我将它放在将其附加到索引的costructor方法中,就像这样:

 $this->middleware('auth', ['only' => 'index'])

它也不会跑。

对此有何解决方案?

1 个答案:

答案 0 :(得分:0)

if(!\Auth::check()){..} //this returns false if a user is logged in, are you sure that's what you want?

如果没有,则删除'!'

您也可以将重定向逻辑放在中间件中。如果您使用的是Laravel附带的auth中间件,那么这已经到位了。您只需要修改它,如下所示,并将中间件调用放在构造函数中。

public function handle($request, Closure $next, $guard = null)
{
   if (Auth::guard($guard)->guest()) {
       return redirect()->guest('login');
   }

   return $next($request);
}