3

我正在我的 Laravel 4 项目中创建一个授权系统。我正在尝试使用身份验证“之前”过滤器。

在我的routes.php文件中,我有:

Route::get('viewer', array('before' => 'auth', function() {
    return View::make('lead_viewer');
}));

Route::get('login', 'LoginController');

before 过滤器调用文件中的这一行filters.php

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::route('login');
});

我可以手动导航到我的登录路线。但是身份验证系统不会让这种情况发生。我已经跑composer dump-autoload了几次,所以这不是问题。我在做什么,因为如果我手动执行,我实际上可以加载登录页面?

4

3 回答 3

6

我想通了。Laravel 正在寻找一条命名路线:我必须这样做:

Route::get('login', array('as' => 'login', function() {
    return View::make('login');
}));

Laravel 中一种有趣但不是很直观的方法。但泰勒这样做肯定有一个我没有看到的原因。

于 2013-03-01T17:25:26.997 回答
2

要执行您在初始方法中尝试执行的操作,您可以执行以下操作:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('/login');
});

它会工作得很好。

如果您想使用命名路线,那么您可以按照您在回答自己的问题时发布的内容进行操作。本质上……不止一种给猫剥皮的方法。

希望有帮助

于 2013-05-09T16:27:27.453 回答
1

我知道你现在可能已经解决了这个问题,但是在尝试解决类似问题时偶然发现你的帖子后,我想分享我的想法......

Laravel 并没有为来宾方法寻找命名路由,它需要一个path

您的示例有效,因为命名路由和路径相同,即“登录”。尝试将您的 URL 更改为“登录”以外的其他内容,然后看着它失败。

如果你想使用命名路由,你应该使用 route helper 方法......

if (Auth::guest()) return Redirect::guest( route('login') )

希望对某人有所帮助。

于 2014-08-18T08:32:23.473 回答