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

Laravel环境下如何为Affirm确认URL添加CSRF令牌?

解决Laravel集成Affirm时的CSRF 419错误问题

针对你遇到的Affirm回调请求触发419错误的问题,核心原因是Laravel的CSRF中间件会验证所有内部发起的POST请求,但Affirm的user_confirmation_url回调是外部服务发起的请求,无法携带你的应用生成的CSRF令牌,这里给你两种可行的解决方式:

方法一:将回调路由加入CSRF白名单(推荐)

这是最直接且安全的方案,因为外部服务的回调请求本身不需要CSRF防护(CSRF是针对用户在浏览器中被诱导发起的请求)。

打开app/Http/Middleware/VerifyCsrfToken.php文件,在$except数组中添加你的Affirm回调路由:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array<int, string>
     */
    protected $except = [
        'affirm-order', // 这里添加你的回调路由
        // 如果路由是带前缀的,比如'/api/affirm-order',就写完整路径
    ];
}

修改后,Laravel就会跳过对这个路由的CSRF验证,Affirm的回调请求就能正常处理了。

方法二:通过自定义方式传递CSRF令牌(不推荐)

你之前尝试在URL后拼接?token={{csrf_token()}}的方式不生效,是因为Laravel默认只会检查请求头X-CSRF-TOKEN或者表单字段_token,不会识别URL参数里的token。如果一定要走CSRF验证,你需要:

  • 在渲染Affirm配置的页面时,把CSRF令牌注入到请求头或者Affirm的请求参数里
  • 修改VerifyCsrfToken中间件,让它支持从URL参数读取令牌

但这种方式没必要,因为外部服务的回调请求不存在CSRF风险,白名单方案更简洁安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:07