在Laravel中的登录表单中显示验证规则时出现问题



我在Laravel中有自定义验证规则,该规则应该检查用户在表单中写入的密码是否与数据库中的密码匹配,以便他成功登录,如果不匹配,则在密码输入下显示错误。目前,当输入错误的密码时,它只会将我重定向回登录页面,不会显示任何错误。其他一切都很完美。感谢您的帮助。这是我的密码。

LoginController.php

public function login(Request $request)
{
$rules = [
'email'    => 'required|email|exists:AppUser,email', 
'password' => 'required|alphaNum|min:5,new PasswordValidationRule()'
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
$request->session()->put('data', $request->input());
return redirect()->route('login')
->withErrors($validator->errors())
->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 {        
return redirect()->route('login');
}
}

密码验证规则.php

<?php
namespace AppRules;
use IlluminateContractsValidationRule;
use AppUser;
use IlluminateSupportFacadesHash;
class PasswordValidationRule implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param  string  $attribute
* @param  mixed  $value
* @return bool
*/
public function passes($attribute, $value)
{
$user = User::where('email', $request->email)->first();
if(Hash::check($value, $user->password)) {
return true;
}
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return ':attribute Password is incorrect!';
}
}

login.blade.php

<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>

如果您在验证规则中注释掉了密码,则可以执行类似的操作

if (Auth::attempt($userData)) {
return redirect()->intended('dashboard');
} else {        
return redirect()->route('login')
->withErrors(['error'=>'Incorrect username or password']);
->withInput($request->session()->put('data', $request->input()));
}

您可以使用会话检索它

{{session('errors')->first('error');}}

最新更新