Laravel身份验证不记得我令牌

时间:2014-10-24 01:18:19

标签: php session authentication cookies laravel

我正在使用Laravel 4.2的身份验证机制,我正在试图弄清楚何时以及如何设置“记住我”cookie令牌。

由于某些原因,当我执行以下代码时,即使第二个参数是false,当我关闭浏览器并重新打开它时,我仍然会自动登录而无需输入用户名和密码。所以实际上它总是表现得像是“记住我”一样,即使它是false

我的验证码:

 //called on POST of login page with credentials
 $userdata = array(
            'email'     => Input::get('email'),
            'password'  => Input::get('password')
  );

  // attempt to do the login
  if (Auth::attempt($userdata, false))
  {
         //redirect to main secure page

我在登录页面上检查以检查用户是否已经过身份验证:

  //called on GET of login page
  if (Auth::check())
  {
         //user already logged in, redirect to main secure page immediately

即使传递了Auth::attempt() false,当我关闭浏览器并重新打开它时,Auth::check()仍会返回true,这通常会清除所有会话。

当我以前在PHP中手动进行身份验证(不使用Laravel的身份验证方法)时,我常常使用类似的东西:

   //authenticate the user with the DB and get the $user object
    $_SESSION['user'] = $user;        //set it in the session

然后在我的安全页面中,我会检查用户是否通过执行以下操作登录:

    if (isset($_SESSION['user']))
    {
       //user already logged in ...

在这种情况下,关闭浏览器并重新打开它会清除会话。 (我刚刚使用我的一个较旧的webapps验证了这一点,它仍然表现得那样,所以它不是一些浏览器问题。)

Laravel有没有理由不以这种方式行事?如果它仍然在浏览器会话中保留身份验证会话,那么传递“记住我”标志的重点是什么? 有没有办法禁用此行为并使其正常工作(即当浏览器关闭时,会话不再保留)?

1 个答案:

答案 0 :(得分:4)

好的似乎除了config/auth.php配置之外,config/session.php中有更详细的会话配置,我想要的实际上就是那个文件。

该文件中的'expire_on_close' => false设置是导致此行为的原因,并将其更改为true会立即解决问题。

默认情况下不确定为什么false。如果人们只是在没有退出应用程序的情况下关闭浏览器就不安全了(因为他们不会检查“记住我”,他们会认为应用程序不会记住它们并且该会话将被销毁),其他人打开浏览器,并能够访问相同的安全页面。

无论如何,如果有人需要,可以发布回答。