【问题标题】:Laravel back()->withInput(); not workingLaravel back()->withInput();不工作
【发布时间】:2016-10-25 02:34:47
【问题描述】:

我目前正在关注登录表单上的视频教程。这是 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();
        }
    }

【问题讨论】:

  • 你使用的是什么 Laravel 版本?
  • @TiagoRL 我正在使用 Laravel 5.2。还用我发现的东西编辑了我的问题。
  • 如果任何$this-&gt;validate() 规则失败,您将立即被重定向回来。添加文档laravel.com/docs/master/… 的这一部分中包含的代码。如果显示任何内容,则表示正在触发 validate(),这就是代码没有到达 else 的原因。我不能肯定地说,因为我不知道你定义了什么规则。
  • 另外,关于输入,无论如何,默认情况下,Laravel 已经将输入发回,所以,你可以尝试添加 old('email') 看看它是否有效。 {!! Form::text('email', old('email'), array('class' =&gt; 'form-control', 'placeholder' =&gt; 'EMail')) !!}
  • @TiagoRL 已添加此代码。没有收到任何错误。这些是我的规则:'email' =&gt; 'required|email|exists:users', 'password' =&gt; 'required'。 old() 也不可悲地工作。提前谢谢你。

标签: laravel redirect login


【解决方案1】:

开箱即用,Laravel 带有 web 和 api 中间件组,其中包含您可能希望应用于 web UI 和 API 路由的常用中间件: App/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】:

    尝试改变

    return back()->withInput();
    

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

    【讨论】:

    • back()redirect()-&gt;back() 相同,您可以在 Laravel 的源代码中看到。 withInput() 的作用也与 withInput(\Input::all()) 相同。
    【解决方案3】:

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

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

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

    总结

    • 如果您有 Laravel 5.2.27 及更高版本,则无需将路由包装在 web 中间件组中。
    • 如果版本低于该版本,那么您需要这样做,才能使用会话变量并获得验证错误。

    来源

    【讨论】:

    • 每个答案都应该是这样。扎实且有很好的解释
    【解决方案4】:

    如果表格已经返回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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2017-10-21
      • 2018-06-01
      • 2014-08-12
      • 2014-01-16
      相关资源
      最近更新 更多