Laravel 8 登录验证失败时如何重定向到自定义路由
Laravel 8 模态框登录验证失败跳转到指定登录页解决方案
核心逻辑说明
Laravel 默认的表单验证失败后会自动返回上一个访问地址,嵌入在其他页面的 Bootstrap 模态框登录表单提交失败时,上一个地址就是当前模态框所在页面,因此只会触发当前页刷新,不会跳转到独立登录页。通过重写验证失败的重定向规则即可实现需求。
操作步骤
步骤1:修改认证控制器的验证失败重定向逻辑
对应不同的认证脚手架,修改对应的控制器文件:- 若使用 Laravel 原生 Auth 脚手架,打开
app/Http/Controllers/Auth/LoginController.php,新增以下方法:
use Illuminate\Validation\ValidationException; protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) { throw (new ValidationException($validator)) ->redirectTo(route('login')); }- 若使用 Laravel Breeze 认证体系,打开
app/Http/Controllers/AuthenticatedSessionController.php,在store方法中修改验证逻辑,用try catch捕获验证异常,手动指定重定向地址:
use Illuminate\Validation\ValidationException; public function store(Request $request) { try { $request->validate([ 'email' => ['required', 'string', 'email'], 'password' => ['required', 'string'], ]); } catch (ValidationException $e) { return redirect()->route('login') ->withErrors($e->validator) ->withInput(); } // 原有登录校验逻辑保持不变 }- 若使用 Laravel 原生 Auth 脚手架,打开
步骤2:登录页添加错误提示展示
打开独立登录页对应的 Blade 视图文件,在合适位置添加错误提示代码:
配置完成后,模态框提交登录信息验证失败时,就会自动跳转到@if ($errors->any()) <div class="alert alert-danger"> @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach </div> @endif/login页面并展示对应的错误提示。
内容的提问来源于stack exchange,提问作者Dewagg
相关产品推荐
相关产品推荐

