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

Laravel中如何仅为单个POST路由禁用CSRF令牌?

解决Paytabs支付回调POST路由的CSRF令牌验证问题

问题场景

我在集成Paytabs支付网关API时遇到了个棘手的问题:交易完成后API会以POST请求跳转到我设置的回调URL,但原本的GET路由不支持POST请求,改成POST路由后又触发了TokenMismatchException in VerifyCsrfToken.php line 68错误——因为Paytabs的回调请求根本不会携带我们系统的CSRF令牌。我想知道能不能只给这一个POST路由禁用CSRF验证?

踩过的坑(已尝试方案)

我之前照着网上的建议修改了VerifyCsrfToken类,结果直接报Class 'Middleware' not found:

class VerifyCsrfToken extends Middleware {
    protected $except = [
        'signup/complete',
    ];
}

正确的解决步骤

这个错误其实是因为基类引用错了!在Laravel框架里,VerifyCsrfToken中间件的正确基类是Illuminate\Foundation\Http\Middleware\VerifyCsrfToken,而不是凭空的Middleware类。

你只需要把代码改成下面这样就可以了:

<?php

namespace App\Http\Middleware;

// 先引入正确的基类,并且可以给它起个别名方便使用
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * 不需要验证CSRF令牌的URI列表
     *
     * @var array<int, string>
     */
    protected $except = [
        'signup/complete', // 这里替换成你的Paytabs回调路由路径
    ];
}

几个关键注意点

  • 路由路径要完全匹配:比如你的回调路由是/paytabs/callback,就别写成paytabs/callback(少了斜杠),否则还是会触发验证
  • 只加信任的路由:千万别把无关路由加到$except里,这会带来安全风险,只放Paytabs的回调地址就好
  • 如果用了路由前缀(比如api/),记得把前缀也加上,比如api/paytabs/callback

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:45:21