Laravel 访问admin后台仪表盘每次重定向到登录页问题求助
排查思路与解决方案
1. 排查中间件是否正确注册
你在路由中使用的authadmin是中间件别名,需要先在Laravel的内核配置文件中注册才能生效:
- 打开
app/Http/Kernel.php文件,找到$routeMiddleware属性,确认是否添加了如下配置:
protected $routeMiddleware = [ // 其他已有中间件 'authadmin' => \App\Http\Middleware\AuthAdmin::class, ];
如果没有添加,补上配置后重试。
2. 排查路由中间件配置错误
你当前路由中使用的auth:sanctum是面向无状态API/SPA场景的鉴权中间件,传统后端渲染的Web页面不需要使用,且web路由默认依赖web中间件组来初始化Session、CSRF等功能,如果Session没有启动会导致读不到utype字段,触发跳转逻辑。
调整路由配置如下:
// web.php中默认所有路由已经归属web中间件组的话可以省略第一个web参数 Route::middleware(['auth', 'verified', 'authadmin'])->group(function() { Route::get('/admin/dashboard', AdminDashboardComponent::class)->name('admin.dashboard'); });
如果你的RouteServiceProvider中没有给web.php路由默认绑定web中间件,需要主动在路由的middleware数组第一个位置加上web参数。
3. 优化中间件逻辑避免循环跳转
当前中间件只要读不到utype就执行session()->flush()清空所有Session,会直接销毁正常的登录状态,导致跳转登录后仍然没有权限,形成循环。修改中间件逻辑如下:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class AuthAdmin { public function handle(Request $request, Closure $next) { // 先校验是否已登录,避免未登录场景清空Session if (!auth()->check()) { return redirect()->route('login'); } if(session('utype') === 'ADM') { return $next($request); } // 权限不足时不要清空全部Session,跳转到普通用户首页或者无权限提示页 session()->flash('error', '您没有管理员访问权限'); return redirect()->route('home'); } }
4. 校验登录逻辑的Session写入是否正常
确认登录校验成功后,正确写入了utype字段,并且强制同步到存储:
// 登录账号密码校验通过后执行 session()->put('utype', 'ADM'); // 强制写入Session,避免延迟写入导致跳转后读不到值 session()->save();
可以在写入后临时加dd(session('utype'))打印输出,确认值正确为ADM,大小写完全匹配。
5. 排查Session驱动权限问题
如果使用file作为Session驱动,确认storage/framework/sessions目录有读写权限;如果使用cookie驱动,确认域名、路径配置正确,没有跨域导致Cookie写入失败。
内容的提问来源于stack exchange,提问作者Swimo Omix
相关产品推荐
相关产品推荐

