难以理解'记住我'在laravel中的功能

时间:2014-08-30 20:32:01

标签: php 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>

这发布到下面的功能。但是现在发生的事情是,用户总是使用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(); 

    }

}

3 个答案:

答案 0 :(得分:1)

true作为Auth::attempt的第三个参数传递将记住登录成功。此外,您的$remember检查没有意义,因为复选框应该表示布尔值,Input::get将其返回为1null,其评估为true或分别为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(); 
}

答案 1 :(得分:0)

记住我很难做到的原因之一(并且有很多)是第一次有人登录盒子时检查他们需要按常规登录并触发你要做的存储允许他们在会话结束后回来时没有提供用户名和密码就登录,并且他们关闭了浏览器等。因此初始身份验证必须完全正常,除非添加了将来登录存储的步骤。正在检查的记住我框在初始身份验证中播放无角色。假设您要将数据存储在cookie中,选中该复选框意味着在成功验证后创建cookie并实现记住我身份验证所需的其他逻辑(我不会进入问题那个)。

稍后当他们回来时,他们不应该检查方框或类似的东西,他们应该只是登录。当记住我的功能发挥作用时,那就是你是实现这一点。

答案 2 :(得分:0)

这对我有用:

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

View看起来像这样:

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

关闭一个旧的教程,我不知道我找到了什么,但它确实有效。