Laravel 5.4未输入密码登录时无法显示错误消息的问题
解决未输入密码时不显示错误提示的问题
看起来你已经找对了方向——重写validateLogin()方法来确保邮箱和密码都被验证,但密码为空时错误没显示出来,大概率是两个地方的问题:视图的错误输出逻辑,或者没有统一错误提示内容。我来一步步帮你解决:
1. 统一验证规则的错误消息与登录失败提示
你当前的验证规则仅做了必填校验,但默认错误消息和登录信息错误的提示不一致。可以直接在验证里自定义错误消息,让它和登录失败时的提示完全相同:
protected function validateLogin() { $this->validate(request(), [ 'email' => 'required', 'password' => 'required' ], [ 'email.required' => '登录信息错误', 'password.required' => '登录信息错误' ]); }
这样不管是邮箱为空还是密码为空,都会弹出你想要的"登录信息错误"提示。
2. 检查视图是否正确输出密码字段的错误
很多时候问题出在视图里——你可能只渲染了邮箱的错误,却忘了处理密码的错误。确保你的登录视图里,针对密码输入框也添加了错误输出:
{{-- 邮箱输入框及错误 --}} <div> <label for="email">邮箱</label> <input type="email" name="email" id="email" value="{{ old('email') }}"> @error('email') <span class="text-red-500">{{ $message }}</span> @enderror </div> {{-- 密码输入框及错误 --}} <div> <label for="password">密码</label> <input type="password" name="password" id="password"> @error('password') <span class="text-red-500">{{ $message }}</span> @enderror </div>
如果想更统一,也可以在表单顶部直接显示统一的错误提示:
@if ($errors->any()) <div class="text-red-500">登录信息错误</div> @endif
3. 同步登录失败时的提示
最后,别忘了当邮箱密码都填写但不匹配时,也要返回同样的提示。你可以重写sendFailedLoginResponse()方法(Laravel默认登录控制器包含这个方法):
use Illuminate\Validation\ValidationException; protected function sendFailedLoginResponse(Request $request) { throw ValidationException::withMessages([ 'email' => ['登录信息错误'], ]); }
这样不管是字段为空还是账号密码不匹配,用户看到的都是完全一致的提示,完美符合你的需求。
内容的提问来源于stack exchange,提问作者Sara Shokry
相关产品推荐
相关产品推荐

