Laravel登录重定向后Auth::check()返回false的问题解决
问题原因及解决方案
核心问题
你路由文件中的if(Auth::check())逻辑是在应用启动加载路由时执行的,而非用户请求到来时执行。此时Laravel还未处理用户请求、初始化会话,Auth::check()必然返回false,导致home路由从未被注册;同时登录/注册路由会一直被加载,这就出现了登录成功后重定向到/home时,路由层面无法识别已登录状态的问题。
修复方案
1. 修正路由写法,用中间件替代路由加载时的条件判断
不要在路由初始化阶段判断登录状态,改用Laravel内置的auth和guest中间件做权限控制:
<?php use Illuminate\Support\Facades\Route; use Inertia\Inertia; Route::get('/', function () { return view('welcome'); }); // 仅允许已登录用户访问的home路由,通过auth中间件保护 Route::get('home', function() { return Inertia::render('home'); })->name('Home')->middleware('auth'); // 仅允许未登录用户访问的登录/注册路由,通过guest中间件保护 Route::group(['middleware' => 'guest'], function() { Route::group(base_path('routes/register.php')); Route::group(base_path('routes/login.php')); });
2. 补充说明
auth中间件会自动拦截未登录用户,将其重定向到登录页面(可在app/Http/Kernel.php中配置跳转规则)。guest中间件会自动拦截已登录用户,避免重复访问登录/注册页面。- 你控制器中的
Auth::login($user)逻辑是正确的,登录后会话会被正确初始化,中间件能识别到登录状态。
内容的提问来源于stack exchange,提问作者Zain Hibattulloh
相关产品推荐
相关产品推荐

