我目前正在关注登录表单上的视频教程。以下是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();
}
}
答案 0 :(得分:3)
因此,正如我们所讨论的,问题是web
中间件。在Laravel 5.2框架的先前版本中,如果要启用会话和错误变量,则必须将路由包装在web
中间件中。
从版本5.2.27
开始,情况不再如此,因为默认情况下,该中间件组已应用于所有路由。
明知道,使用版本5.2.27
或更高版本并使用Web中间件组会导致这些相同变量出现问题,常见问题是会话变量未被传递,以及$errors
变量由由Laravel验证API返回的类\Illuminate\View\Middleware\ShareErrorsFromSession
已设置,但为空**。
<强>摘要强>
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
,其中包含负责会话处理的StartSession
和ShareErrorsFromSession
,因此,如果您要显示验证错误或保留旧数据,则必须将其包括在内你的中间件组。在这种情况下是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>