2013-11-15 2 views
2

Недавно я решил добавить функцию «запомнить меня» в мое приложение Laravel 4. Соответствующий метод с syntaxis был найден:

Auth::attempt(array $credentials = array(), $remember = false) 

Это был принят для моих потребностей, как так:

Auth::attempt($userdata, Input::has('remember')) 

Применение хранится сеанс идентификации и аутентификации пользователя, даже после того, как браузер был закрыт.

Хотя, я выяснил, что теперь Laravel всегда поддерживает аутентификацию пользователя, независимо от того, что означает «помнить» галочку.

Я попытался сделать:

Auth::attempt($userdata, false) 

и

Auth::attempt($userdata,) 

Пользователь еще аутентификацией через сеансов браузера !!! Теперь, начиная с Auth::attempt($userdata), не сохраняя сеанс аутентификации, я чувствовал, что всякий раз, когда есть указание второго аргумента в методе Auth::attempt, Laravel auto принимает его как «истинный». Может ли кто-нибудь объяснить это?

EDIT: Чтобы сделать его супер ясно всем, я перечислю шаги, чтобы воссоздать такое поведение:

  1. Выход из приложения Auth::logout();
  2. Войти снова Auth::attempt($userdata, false)
  3. Закрыть и открыть браузер
  4. Перейти к окну приложения.
  5. Приложение загружается аутентифицирован

Это мой первый вопрос здесь, поэтому, пожалуйста, будьте терпеливы со мной :)

ответ

4

EDIT: OP ясно дал понять, что он правильно назвал Auth::logout(), поэтому ответ отредактирован, чтобы включить «Реальный» ответ.

Установить lifetime значение в app/config/session/php для 0, чтобы сделать печенье ясно браузера близко.

Предыдущий ответ

Это login метод Illuminate\Auth\Guard (который facaded к Auth) класса, который в конце концов, наречено Auth::attempt().

источник: http://laravel.com/api/source-class-Illuminate.Auth.Guard.html#263-291

public function login(UserInterface $user, $remember = false) 
{ 
    $id = $user->getAuthIdentifier(); 

    $this->session->put($this->getName(), $id); 

    // If the user should be permanently "remembered" by the application we will 
    // queue a permanent cookie that contains the encrypted copy of the user 
    // identifier. We will then decrypt this later to retrieve the users. 
    if ($remember) 
    { 
     $this->queuedCookies[] = $this->createRecaller($id); 
    } 

    // If we have an event dispatcher instance set we will fire an event so that 
    // any listeners will hook into the authentication events and run actions 
    // based on the login and logout events fired from the guard instances. 
    if (isset($this->events)) 
    { 
     $this->events->fire('auth.login', array($user, $remember)); 
    } 

    $this->setUser($user); 
} 

Совершенно очевидно, что даже если куки установлен, когда $remember установлен в true, сам печенье не очищается, когда $remember установлен на ложных или других не truthy значения.

Куки очищаются, когда вы вызываете Auth::logout() Функция.

+0

Спасибо за ответ, я просто не уверен, что вы имеете в виду - я говорю о «чистом» логине, без какого-либо cookie, установленного перед рукой. –

+0

Вы вызвали 'logout()' после предыдущего входа? – tharumax

+0

Да, я редактировал мой пост сейчас, должен быть более ясным :) –