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

Laravel 8分组中间件异常:登录后访问登录URL仍显示登录页

Laravel 8分组中间件异常修复方案

问题现象

  • 已登录状态下访问受保护URL无法正常生效
  • 登录后访问登录URL仍显示登录页面

原问题代码

$path=$request->path();
$emailcheck = session()->get('email');
if(!Session::get('email') && $path !=="skc-admin/login"){
    //echo Session::get('email');
    return redirect('/');
    //echo $path;
}elseif($path =="skc-admin/login" && Session::get('email') ){
    return redirect("skc-admin/dashboard");
}
return $next($request);

问题分析

  1. 路径判断逻辑误差:Laravel的$request->path()返回的是不带路由前缀的相对路径,如果你的skc-admin是路由组前缀,那登录页的实际路径是login而非skc-admin/login,导致判断失效。
  2. 硬编码路径不健壮:直接写死路径会导致后续路由结构调整时,中间件逻辑同步失效。
  3. session调用不统一:代码中混用session()->get()和Session::get(),虽功能一致,但易引发维护混乱。

修复方案

第一步:给路由命名(推荐做法)

先给登录、仪表盘路由设置名称,避免硬编码路径:

// 登录路由(不要放在受保护的中间件组内)
Route::get('skc-admin/login', [AdminController::class, 'login'])->name('admin.login');

// 受保护的路由组
Route::prefix('skc-admin')->middleware('admin.auth')->group(function () {
    Route::get('dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
    // 其他受保护路由
});

第二步:修改中间件代码

public function handle(Request $request, Closure $next)
{
    $isLoggedIn = !empty(session('email'));
    $isLoginRoute = $request->routeIs('admin.login');

    // 未登录且访问非登录页,重定向到首页
    if (!$isLoggedIn && !$isLoginRoute) {
        return redirect('/');
    }

    // 已登录且访问登录页,重定向到仪表盘
    if ($isLoggedIn && $isLoginRoute) {
        return redirect()->route('admin.dashboard');
    }

    return $next($request);
}

额外注意事项

  • 检查.env文件的SESSION_DRIVER配置,确保session正常工作(推荐file或database驱动)
  • 确认中间件已正确注册到app/Http/Kernel.php的$routeMiddleware数组中:
protected $routeMiddleware = [
    // 其他中间件
    'admin.auth' => \App\Http\Middleware\AdminAuth::class,
];

内容的提问来源于stack exchange,提问作者Webzy Infotech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:26