当我使用
时Auth::attempt();
验证用户的方法我还在会话中放置了一些用户数据,比如用户ID,角色等。我将会话生存期设置为零。因此,当用户检查“记住我”chechbox laravel甚至在他关闭浏览器后记得他。但是,当他关闭浏览器时,我丢失了会话数据。虽然用户已登录,但我不再拥有与他相关的一些会话数据。
我尝试了这个解决方案:
Route::get('/', function() {
if (Auth::check()) {
$user = Auth::user();
Session::put('user_id', $user->id);
Session::put('company_id', $user->company_id);
Session::put('is_super_admin', Company::isSuperAdmin($user->company_id));
Session::put('is_admin', $user->is_admin);
if (Session::get('is_super_admin')) {
return View::make('admin');
} else {
return View::make('client');
}
} else {
return View::make('login');
}
});
它有效。但是,这意味着每次登录的用户都去了我应该检查他是否已经登录的地方我必须连接到数据库,获取用户数据并将其放入会话中,所以这是不好的解决方案。
但即使在浏览器关闭后,我怎么能记住我自己的用户会话细节呢?
答案 0 :(得分:2)
要在Laravel中记住我,你应该在Auth::attempt()
中添加一个额外的真实布尔标志作为参数。请参阅文档:http://laravel.com/docs/security#authenticating-users
if (Auth::attempt(array('email' => $email, 'password' => $password), true))
{
// The user is being remembered...
}
编辑:
不要自己将数据放入会话中。要使用Auth::user()->field
来访问该数据。