php - 使用会话在登录表单上显示错误的问题
问题描述
我在 Laravel 中有登录表单,但无法在我的电子邮件和密码字段上显示错误。我制作了验证器,其中包含该错误消息,并将其放入会话中并将其重定向到 GET /login。我需要有关如何从会话中读取这些值并将它们作为参数返回到刀片中的帮助,然后才能显示电子邮件和密码的这些错误消息。目前验证有效,但它不显示任何消息,它只重定向回登录页面。任何帮助表示赞赏。这是我的代码。
网页.php
Route::post('/login', 'Auth\LoginController@login')->name('login');
登录控制器
public function showLoginForm(Request $request)
{
$session = $request->session()->get('data');
return view('auth.login', compact('session'));
}
public function login(Request $request)
{
$rules = array(
'email' => 'required|email',
'password' => 'required|alphaNum|min:3'
);
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
$request->session()->put('data', $request->input());
return redirect()->intended('login')
->withErrors($validator)
->withInput($request->session()->put('data', $request->input()));
} else {
$userData = array(
'email' => $request->get('email'),
'password' => $request->get('password')
);
}
if (Auth::attempt($userData)) {
return redirect()->intended('dashboard');
} else {
redirect()->intended('login');
}
}
登录刀片
<div class="login-page">
<div class="login-box">
<div class="card mb-0">
<div class="card-body login-card-body">
<p class="login-box-msg font-weight-bold">Sign in to start your session</p>
<form method="POST" class="mb-4" action="{{route('login') }}">
@csrf
<div class="input-group mb-3">
<input id="email" type="email" placeholder="Email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" autocomplete="email" autofocus>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-user"></span>
</div>
</div>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="input-group mb-3">
<input id="password" type="password" placeholder="Password" class="form-control @error('password') is-invalid @enderror" name="password" autocomplete="current-password">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-eye-slash cursor-pointer" style="display: none" onclick="showPassword()"></span>
<span class="fas fa-eye cursor-pointer" onclick="showPassword()"></span>
</div>
</div>
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="float-right">
<button type="submit" class="btn btn-primary btn-block font-weight-bold">Sign In</button>
</div>
</form>
</div>
</div>
</div>
</div>
解决方案
你将不得不打电话->withErrors($validator->errors())
。这将返回正确的MessageBag
. 否则,您将返回一个Validator
实例。之后,您可以按预期使用$errors
变量或标签。@error
@editinteded()
使用route()
或back()
.
推荐阅读
- python-3.x - 尝试使用创建表单时,{{form.as_table}} 的 django 模板出错
- c# - 仅修剪包含某些单词的字符串并将它们添加到 c# 中的字符串列表中
- c++ - 如何在两个 STL 容器之间移动 unique_ptr 对象
- powerbi - 我们可以为某些用户关闭 RLS 吗?
- sql - Laravel Eloquent 中有一些 WITH 子句?
- jquery - 猫头鹰轮播限制点分页
- python - 计算 ID 在随后的 180 天内出现的次数
- reactjs - React 为两个不同的图标创建一个样式的组件?
- machine-learning - 使用梯度下降的多元线性回归
- firefox-addon - 在 Android 上安装 Firefox 插件