Auth :: check()和之前('auth')=每个页面总是sql请求?

时间:2014-01-30 17:01:30

标签: sql authentication laravel laravel-4

我是在搞乱某事还是Laravel会执行sql请求从用户表中获取数据,即使我在特定页面上执行的操作是Auth :: check()还是之前('auth')在路由器中过滤?它不能“得到”用户只是从会话数据(login_82e5d2c56bdd0811318f0cf078b78bfc = user_id等)登录而没有

select * from `users` where `id` = ? limit 1 

? 在简单检查用户状态的情况下,有一些安全性或其他上升不仅仅处理会话数据(我更愿意为每个会话(不是每页)向mysql发出1个用户数据请求(或者除此之外)而不是存储它在会话中,会话设置存储在memcached或redis中,我想知道我可以得到“开箱即用”\没有认证系统框架的严重变化)?

1 个答案:

答案 0 :(得分:0)

第一次检查时,您可以将其保存在容器中

App::before(function($request)
{
    App::singleton('myApp', function(){
        $app = new stdClass();
        if(Auth::check()) {
            $app->user = Auth::User();
            $app->isLogedin = TRUE;
        }
        else {
            $app->user = false;
            $app->isLogedin = false;
        }
        return $app;
    });

    $myApp = App::make('myApp');
    View::share('myApp', $myApp);
});

现在在每个视图中,您都可以像这样检查

@if($myApp->isLogedin)
    Hello {{ $myApp->user->user->user_name }}!
@endif

在任何控制器中,您都可以像

一样使用它
$myApp = App::make(myApp); // Get it from the container
// do whatever you want to do

因此,您可以检查是否已登录,也可以使用Auth::user()使用$myApp->user对象。