我正在Laravel 4项目中创建一个授权系统。我正在尝试使用auth“before”过滤器。
在我的routes.php
文件中,我有:
Route::get('viewer', array('before' => 'auth', function() {
return View::make('lead_viewer');
}));
Route::get('login', 'LoginController');
前置过滤器在filters.php
文件中调用此行:
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::route('login');
});
我可以手动导航到我的登录路线。但是auth系统并没有让这种情况发生。我已经运行了composer dump-autoload
几次,所以这不是问题所在。我在做什么,因为如果我手动操作,我实际上可以加载登录页面?
答案 0 :(得分:6)
我明白了。 Laravel正在寻找一条命名路线:我必须这样做:
Route::get('login', array('as' => 'login', function() {
return View::make('login');
}));
Laravel中一种有趣但不是非常直观的方法。但是泰勒必须有这样的理由,我没有看到。
答案 1 :(得分:2)
要做你在初步方法中尝试做的事情,你可能刚刚做了:
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('/login');
});
它会工作得很好。
如果您想使用命名路线,那么您可以在回答自己的问题时执行所发布的操作。基本上......不止一种方法给猫皮肤。
希望有所帮助
答案 2 :(得分:1)
我知道你现在可能已经解决了这个问题,但是在试图解决类似问题的同时绊倒了你的帖子后,我想分享我的想法......
Laravel 不正在寻找guest方法的命名路由,它期待路径。
您的示例有效,因为命名路由和路径相同,即" login"。尝试将您的网址更改为“登录”之外的其他网址。并观察它失败。
如果你想使用一个命名路线,你应该使用路径助手方法......
if (Auth::guest()) return Redirect::guest( route('login') )
希望能有所帮助。