Laravel在所有请求中检查登录和Auth :: check()

时间:2015-09-29 17:01:58

标签: php laravel laravel-4

使用Laravel,4我在所有控制器中使用Auth::check()检查登录会话。这对我的项目不利,所以我尝试通过使用过滤器来检查所有请求和响应中的用户登录会话:

App::before(function($request)
{
    if(!Auth::check()) {
        return Redirect::route('login');
    }
});

不幸的是,我收到了这个错误:

The page isn't redirecting properly

如何在不使用路由和控制器中的Auth::check()的情况下检查登录会话?

3 个答案:

答案 0 :(得分:1)

这里真正的问题是你有一个无限的重定向循环。 Redirect::route('login')将适用于每个请求 ....包括对The page isn't redirecting properly的请求。

因此,在重定向到登录页面时,您会立即再次重定向到登录页面,依此类推。您的浏览器将检测到无限重定向,将其停止并告诉您Request::is()

解决此问题的一种方法是使用if (!Auth::check() && !Request::is('login')) { return Redirect::route('login'); } 方法检测您是否已经在登录页面上。如果你是,请不要再次重定向。

    Map map = new HashMap<Integer,ArrayList<String>>();

答案 1 :(得分:0)

使你的routes.php如下

Route::group(array('before' =>'auth'), function()
{
Route::get('something','HomeController@something');
});

在您的filters.php中,将更改重定向到您想要的路线

Route::filter('auth', function()
{
if (Auth::guest())
{
    if (Request::ajax())
    {
        return Response::make('Unauthorized', 401);
    }
    else
    {
        return Redirect::guest('your_desired_route');
    }
 }
 });

所以这里登录在filters.php中检查而不是routes.php或控制器。

答案 2 :(得分:0)

您的重定向页面似乎有问题。你只需要改变

App::before(function($request)
{
    if (Auth::check()) {
         return Redirect::to('admin/dashboard');
    } else {
         return View::make('login')
    }
});