You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中redirect()->back()->withErrors丢失错误信息问题

问题原因及解决方案

原因

核心问题是GET和POST登录路由使用了重复的名称login,Laravel要求路由名称必须唯一,重复命名会干扰Session闪存数据的传递流程。当你用redirect()->back()->withErrors()时,错误信息会被临时存入Session,但路由名称冲突导致重定向后的GET请求无法正确读取Session中的错误数据,最终视图里的$errors为空。

解决方案

1. 给POST路由设置唯一名称

修改路由定义,为POST登录路由分配唯一名称,比如login.authenticate:

Route::middleware(['guest'])->group(function () {
    Route::get('/login', [LoginController::class, 'showLoginForm'])
        ->name('login');

    Route::post('/login', [LoginController::class, 'authenticate'])
        ->name('login.authenticate'); // 设置唯一路由名称
});

2. 替换redirect()->back()为指定命名路由

在authenticate方法中,直接重定向到login命名路由,避免依赖back()的模糊跳转:

return redirect()->route('login')->withErrors([
    'email' => 'These credentials do not match our records.',
]);

修改后,错误信息会被正确闪存到Session,ShareErrorsFromSession中间件会自动将Session中的错误传递到登录视图,$errors变量就能正常显示错误内容。

可选验证方式

如果需要确认Session传递是否正常,可在登录视图中添加以下代码:

@if(session()->has('errors'))
    {{ session('errors')->first('email') }}
@endif

内容的提问来源于stack exchange,提问作者Jean Paindaveine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:15:30