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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:03:03