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

Laravel路由中如何注册后置中间件,在控制器处理请求后执行

解决方案

要让中间件在控制器处理请求之后运行,你需要将其改为后置中间件——也就是先让请求通过到控制器执行登录逻辑,再在中间件里检查用户验证状态。具体修改如下:

修改后的中间件代码

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Closure;

class UserIsVerified
{
    public function handle(Request $request, Closure $next)
    {
        // 先让请求进入控制器处理登录流程
        $response = $next($request);

        // 仅当登录成功(当前有认证用户)时,检查验证状态
        if (auth()->check()) {
            $user = auth()->user();
            if (!$user->verified) {
                // 登录成功但未验证,强制登出并返回错误提示
                auth()->logout();
                return response(['message' => '用户未验证。'], Response::HTTP_UNAUTHORIZED);
            }
        }

        // 登录失败时,直接返回控制器给出的响应(比如密码错误提示)
        return $response;
    }
}

逻辑说明

  1. 执行顺序调整:先调用$next($request)让控制器优先处理登录请求——如果用户输入错误密码,控制器会直接返回「密码错误」的响应,中间件不会覆盖这个结果。
  2. 验证检查时机:只有当登录成功(auth()->check()返回true)时,才检查用户是否已验证。如果未验证,就强制登出用户并返回「用户未验证」的提示。
  3. 路由无需修改:原路由的中间件挂载方式保持不变,中间件本身的逻辑调整已经实现了后置执行的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:15:28