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

Laravel 9.5预检(Preflight)错误排查及Stripe结账跳转问题求助

Laravel 9.5预检(Preflight)错误排查及Stripe结账跳转问题求助

Hey,我来帮你梳理下这个预检错误的问题!从你贴出的配置和代码来看,已经做了基础的CORS配置,但还是踩了几个容易忽略的坑,咱们一步步排查:

  • CORS路径匹配问题
    你在config/cors.php里的paths配置是['sanctum/csrf-cookie','create/order'],要注意Laravel的CORS路径匹配是严格区分斜杠的。如果前端请求的是/create/order(带前置斜杠),那当前的配置会匹配不到,导致CORS头不生效。建议改成:

    'paths' => ['sanctum/csrf-cookie','/create/order'],
    
  • AJAX无法处理服务器端跳转(核心问题)
    你在控制器里用了redirect()->away($stripe_session->url),但如果前端是通过AJAX(比如Axios、Fetch)发起的请求,浏览器是无法通过AJAX响应完成页面跳转的!而且浏览器会对这个302跳转的目标(Stripe域名)发起预检请求,但Stripe的域名不在你的CORS允许列表里,这直接触发了Preflight错误。

    正确的做法是把Stripe会话URL返回给前端,让前端主动跳转:
    修改控制器的返回逻辑:

    // 替换原来的 return redirect()->away($stripe_session->url);
    return response()->json([
        'status' => 'success',
        'stripe_checkout_url' => $stripe_session->url
    ]);
    

    前端示例(以Axios为例):

    axios.post('/create/order', yourFormData, {
        withCredentials: true // 对应你配置的supports_credentials: true
    })
    .then(res => {
        window.location.href = res.data.stripe_checkout_url; // 前端主动跳转到Stripe
    })
    .catch(err => {
        console.error(err);
        alert('下单失败,请稍后重试');
    });
    
  • 确认前端请求的Credentials设置
    你在CORS配置里开了supports_credentials: true,那前端请求必须带上withCredentials: true(Axios)或者credentials: 'include'(Fetch),否则浏览器会拒绝接收响应,也可能触发预检错误。

  • 清除配置缓存
    Laravel的配置缓存可能导致新的CORS配置不生效,执行以下命令清除缓存:

    php artisan config:clear
    php artisan cache:clear
    
  • 检查路由中间件
    确认你的create/order路由有没有挂载其他中间件(比如auth:sanctum),如果有,要确保这些中间件不会提前返回响应,导致CORS头没有被正确添加到响应中。

备注:内容来源于stack exchange,提问作者Gakuru Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:53:08