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

如何优化检查用户封禁/未激活状态的Laravel中间件代码以减少冗余?

代码优化方案

你的代码核心问题是相同的会话清理、登出、跳转逻辑在两个判断分支重复编写,优化可以从减少重复、降低嵌套、提升扩展性三个方向入手:

具体优化点

  • 提前终止未登录场景的判断,减少代码嵌套层级
  • 提前把用户实例赋值给变量,避免重复调用auth()->user()
  • 将状态校验方法和对应错误提示做成映射关系,后续新增校验规则只需要加映射项,无需新增重复逻辑块
  • 把重复的登出、会话清理逻辑抽成公共块,只写一次

优化后代码示例

public function handle(Request $request, Closure $next)
{
    // 未登录直接放行到后续中间件/请求逻辑
    if (!auth()->check()) {
        return $next($request);
    }

    $user = auth()->user();
    // 状态校验映射:键为用户模型的校验方法名,值为对应的错误提示
    $stateRules = [
        'isBanned' => trans('login.banned'),
        'isInactive' => trans('login.inactive'),
    ];

    foreach ($stateRules as $checkMethod => $errorMsg) {
        if ($user->$checkMethod()) {
            auth()->logout();
            $request->session()->invalidate();
            $request->session()->regenerateToken();
            return redirect()->route('auth.login')->with('error', $errorMsg);
        }
    }

    return $next($request);
}

可选进阶优化

如果后续你的用户状态校验规则会持续增加,可以把这部分校验规则抽成独立的枚举类或者用户状态校验服务,中间件只负责调用统一的校验入口,不需要维护具体的校验规则和提示对应关系,进一步解耦业务逻辑和中间件流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:27:03