2014-08-30 5 views
0

Итак, я пытаюсь создать функцию «запомнить меня» в процессе входа в мое приложение laravel. Я создал базовую форму с электронной почтой, пароль и запомнить флажок в качестве входных данных, как можно увидеть ниже:Трудности с функцией «Запомнить меня» в laravel

<div class="col-xs-0 col-sm-6 col-md-6 col-md-offset-3 col-sm-offset-3 col-cs-offset-5" id="content"> 

    {{ Form::open(['route' => 'sessions.store']) }} 

     <div> 

      {{ Form::label('email', 'Email:') }} 

      {{ Form::email('email') }} 

     </div> 

     <div> 

      {{ Form::label('password', 'Password:') }} 

      {{ Form::password('password') }} 

     </div> 

     <div> 

      {{ Form::label('remember', 'Remember me:') }} 
      {{ Form::checkbox('remember', 'Remember-me') }} 

     </div> 

     <div>{{ Form::submit('login') }}</div> 

    {{ Form::close() }} 

</div> 

This сообщения функции ниже. Но то, что происходит прямо сейчас, заключается в том, что пользователь всегда вошел в систему с параметром true. Что я делаю не так?

public function store() 
{ 

    $email = Input::get('email'); 
    $password = Input::get('password'); 
    $remember = Input::get('remember'); 

    if ($remember == 'Remember-me') { 

     if (Auth::attempt(array('email' => $email, 'password' => $password), true)) 
     { 

      return Redirect::intended('/'); 

     } 

     return Redirect::back()->withInput(); 

    } else { 

     if (Auth::attempt(array('email' => $email, 'password' => $password))) 
     { 

      return Redirect::intended('/'); 

     } 

     return Redirect::back()->withInput(); 

    } 

} 
+0

Как вы знаете, что пользователь запомнился? Вы смотрите на сеанс, куки или где-то еще? – Elin

+0

Проверяйте его вручную. Вы вошли в систему с установленным флажком, закрыли браузер и снова открыли страницу. То же самое, если флажок не установлен, и поведение не отличается. – User183849481

+0

Из чтения «похожих вопросов» это из-за сеанса не помню меня. Закрытие браузера не завершает сеанс (это ясно из всех других вопросов). Убедитесь, что вы действительно выходите из системы и убедитесь, что сеанс уничтожен. – Elin

ответ

1

Передача true в качестве третьего параметра Auth::attempt будет запомнить логин на успех. Кроме того, ваш код $remember не имеет смысла, потому что флажок должен представлять собой логическое значение, а Input::get возвращает его либо как 1, либо null, который оценивается вили false соответственно.

То, что вы, вероятно, хотите, это:

public function store() 
{ 
    $input = Input::only('email', 'password'); 
    $remember = Input::get('remember'); 

    if (Auth::attempt($input, $remember) 
    { 
     return Redirect::intended('/'); 
    } 

    return Redirect::back()->withInput(); 
} 
+0

Он постоянно запоминает пользователя каждый раз, даже если поле не проверено ... – User183849481

+0

@ User183849481 Как долго? – nCrazed

+0

Даже после перезагрузки компьютера p – User183849481

0

Одна из причин запомнить меня трудно сделать правильно (и есть много) является то, что первый раз кто-то входит в с коробкой проверены, они должны вход в систему традиционно, и это запускает хранилище, которое вы собираетесь делать, что позволяет им входить в систему, не указывая имя пользователя и пароль, когда они возвращаются после истечения срока их сеанса, и они закрыли свой браузер и т. д. Таким образом, первоначальная аутентификация должна быть полностью нормальный, за исключением добавления шага, где происходит хранение для будущего входа в систему. Помните, что я проверяю флажок никакой роли в этой первоначальной аутентификации. Предполагая, что вы собираетесь хранить данные в файле cookie, проверка флажка означает, что после успешной проверки подлинности создается файл cookie, а другая логика, которая понадобится для запоминания аутентификации, будет реализована (и я не буду вдаваться в проблемы вокруг этого).

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

+0

Я думаю, вы неправильно поняли, что я здесь делаю. Пользователю нужно только проверить этот флажок, чтобы он оставался включенным на всю вечность. Но теперь это также делает это, когда пользователь не проверяет этот флажок, например. он хочет снова войти в систему в следующий раз. – User183849481

+0

Так что вы говорите, что помните, что cookie всегда создан? Вы уверены, что это не значит, что регулярная сессия все еще активна? – Elin

0

Это работает для меня:

$remember = (Input::has('remember')) ? true : false; 

The View выглядит следующим образом:

<div class="field"> 
     <input type="checkbox" name="remember" id="remember" /> 
     <label for="remember">Remember me</label> 
    </div> 

Off старого учебника я не знаю, где я нашел, но это работает.

+0

'Input :: has ('remember')' в любом случае является логическим. Почему «если true, верните истину, иначе верните ложную» бессмыслицу? – Harmen

+0

И что вы использовали для значения флажка? – User183849481

+0

Я обновил код просмотра – 2014-08-31 13:38:49

Смежные вопросы