Laravel back() - > withInput();不工作

时间:2016-06-22 23:57:08

标签: laravel redirect login

我目前正在关注登录表单上的视频教程。以下是Auth :: attempt()失败时使用的代码:

return back()->withInput();

这应该将用户返回到表单并再次填写输入(电子邮件,密码)。但是,当登录工作正常时,字段保持为空。

我该如何解决这个问题?

这是我的表格:

{!! Form::open(array('route' => 'handleLogin')) !!}
        <div class="form-group has-feedback">
            {!! Form::text('email', null, array('class' => 'form-control', 'placeholder' => 'EMail')) !!}
            <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
        </div>
        <div class="form-group has-feedback">
            {!! Form::password('password', array('class' => 'form-control', 'placeholder' => 'Password')) !!}
            <span class="glyphicon glyphicon-lock form-control-feedback"></span>
        </div>
        <div class="row">
            <div class="col-xs-8">
                <div class="checkbox icheck">
                    <label>
                        <input type="checkbox"> Remember Me
                    </label>
                </div>
            </div>
            <!-- /.col -->
            <div class="col-xs-4">
                {!! Form::token() !!}
                {!! Form::submit(null, array('class' => 'btn btn-primary btn-block btn-flat')) !!}
            </div>
            <!-- /.col -->
        </div>
        {!! Form::close() !!}

编辑:发现以下代码我的登录工作,但登录凭据错误时不执行else语句。为什么呢?

public function handleLogin(Request $request)
    {
        $this->validate($request, User::$login_validation_rules);
        $data = $request->only('email', 'password');
        if(\Auth::attempt($data)){
            return redirect()->intended('home');
        }else {
            return back()->withInput();
        }
    }

4 个答案:

答案 0 :(得分:3)

因此,正如我们所讨论的,问题是web中间件。在Laravel 5.2框架的先前版本中,如果要启用会话和错误变量,则必须将路由包装在web中间件中。

从版本5.2.27开始,情况不再如此,因为默认情况下,该中间件组已应用于所有路由。

明知道,使用版本5.2.27或更高版本并使用Web中间件组会导致这些相同变量出现问题,常见问题是会话变量未被传递,以及$errors变量由由Laravel验证API返回的类\Illuminate\View\Middleware\ShareErrorsFromSession已设置,但为空**。

<强>摘要

  • 如果您有 Laravel 5.2.27及更高版本,则无需将路由包装在web中间件组中。
  • 如果版本低于,则需要执行此操作,以便使用会话变量并获得验证错误。

<强>来源

答案 1 :(得分:0)

开箱即用,Laravel附带了web和api中间件组,其中包含您可能想要应用于Web UI和API路径的常用中间件: 应用/ HTTP / Kernal.php

    protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
        'auth:api',
    ],
  ];

查看web,其中包含负责会话处理的StartSessionShareErrorsFromSession,因此,如果您要显示验证错误或保留旧数据,则必须将其包括在内你的中间件组。在这种情况下是web

答案 2 :(得分:-1)

尝试更改

return back()->withInput();

return redirect()->back()->withInput(\Input::all()

答案 3 :(得分:-1)

如果表格已返回 errors,则您必须提出条件,则应填写。

{{old('nom')}} 函数查找给定字段的上一个填充值并回显它。

您可以按如下方式使用它:

<div class="col-sm-8">
    <input type="text" 
           class="form-control form-control-sm @error('nom') is-invalid @enderror" 
           id="nom"
           name="nom"
           placeholder="Ecriver le nom votre ecole "
           value="{{old('nom')}}"
           >
</div>