如果我将重定向放在操作之外,我得到了一个奇怪的重定向无效。例如:
以下代码正在运作
Route::get('/', 'HomeController@index');
public function index()
{
if (Auth::check())
{
$this->user_id = Auth::id();
}
else
{
return Redirect::to('/');
}
// code after check
}
但是,如果我像下面这样把它拿出来,重定向就不会起作用。它根本没有重定向。
Route::get('/', 'HomeController@index');
public function index()
{
$this->authorize();
// code after check
}
private function authorize()
{
if (Auth::check())
{
$this->user_id = Auth::id();
}
else
{
return Redirect::to('/');
}
}
现在如果我必须在每个动作中继续使用if语句,那将很麻烦。相反,我需要只调用$ this-> authorize();
知道它为什么不起作用?
答案 0 :(得分:1)
您没有返回“return Redirect :: to('/');”
的结果试试这个:
public function index()
{
return $this->authorize();
}
答案 1 :(得分:1)
只是一个额外的。如果我使用我的问题的想法似乎是一个坏方法。 Laravel实际上提供了路线保护。所以,现在我按照以下步骤更改我的代码:
app / filter.php中的更改您想要路由的重定向。
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::guest('/');
});
在您的路线保护中使用以下代码: Route :: get('/','HomeController @ index');
Route::group(array('before' => 'auth'), function()
{
// The list of routes you want to protect with authentication
Route::get('blabla', 'BlablaController@index');
}
删除BlablaController上的authorize函数
在索引函数上更改如下:
public function index()
{
$this->user_id = Auth::id();
// code after check
}
现在,如果未经过身份验证,它会自动重定向到“/”
答案 2 :(得分:0)
是。身份验证过滤器是实现身份验证的最佳方式。
另外,如果你使用'Route:when'设置过滤器,你可以让你的routes.php更容易阅读,如下所示:
Route::when('path/*', 'auth');
有了这个,你可以在Route语句中最小化写入数组('before'=>'auth')。