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

Laravel 9实现用户非活跃自动登出中间件报错问题排查

问题分析与修复

你的代码存在两个关键问题,导致报错:

  1. 未处理用户未登录的场景:当用户未登录时,Auth::user()会返回null,直接访问->is_active会触发"Attempt to read property 'is_active' on null"错误。
  2. Auth::logout()无返回值:logout()方法是void类型,没有返回响应,而中间件的handle方法必须返回一个Illuminate\Http\Response实例,直接return它会抛出类型不匹配的错误。

修正后的中间件代码

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use Closure;

public function handle(Request $request, Closure $next)
{
    // 先判断用户是否已登录
    if (Auth::check()) {
        // 验证用户状态
        if (!Auth::user()->is_active) {
            Auth::logout();
            
            // 清除会话并重新生成CSRF令牌
            $request->session()->invalidate();
            $request->session()->regenerateToken();
            
            // 返回重定向响应,跳转到登录页并提示用户登出原因
            return redirect()->route('login')->with('error', '你的账号已被停用,请联系管理员');
        }
    }

    return $next($request);
}

额外注意事项

  • 确保中间件已注册:打开app/Http/Kernel.php,将你的中间件添加到web中间件组(或指定需要验证的路由组):
    protected $middlewareGroups = [
        'web' => [
            // ...其他中间件
            \App\Http\Middleware\CheckUserActive::class,
        ],
    ];
    
  • 确认用户表中存在is_active字段,字段类型为布尔值或整数(1表示活跃,0表示非活跃)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:03:10