使用会话在登录表单上显示错误的问题 [英] Problem with displaying errors on login form using sessions
问题描述
我在Laravel中有登录表单,但在我的电子邮件和密码字段中显示错误时遇到了麻烦.我制作了验证器,其中包含该错误消息,并将其放在会话中并重定向到GET/login上.我需要有关如何从会话中读取这些值并将其作为参数返回到Blade中的信息的帮助,然后才能显示这些错误消息的电子邮件和密码.当前验证有效,但不显示任何消息,仅重定向回登录页面.任何帮助表示赞赏.这是我的代码.
I have login form in Laravel and I am having trouble displaying errors on my email and password fields. I made validator in which I have that error message and I put it in session and redirected it on GET /login. I need help on how to read those values from session and return them in blade as parameter and then to be able to display those error messages for email and password. Currently validation works but it displays no messages, it only redirects back to login page. Any help is appreciated. Here is my code.
web.php
Route::post('/login', 'Auth\LoginController@login')->name('login');
LoginController
LoginController
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
标记.
You will have to call ->withErrors($validator->errors())
. This returns the correct MessageBag
. Otherwise you are returning a Validator
instance.
Afterwards you can use the $errors
variable or the @error
tag as intended.
@edit插入 inteded()
可以使用 route()
或 back()
.
@edit
insted of inteded()
use route()
or back()
.
这篇关于使用会话在登录表单上显示错误的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!