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

Laravel 5.5无法禁用VerifyCsrfToken检查,跨域POST遇302问题求助

解决Laravel 5.4跨域POST请求返回302的问题

嘿,我来帮你捋捋这个头疼的问题!你已经把/create-order加到了CSRF排除列表,但还是收到302重定向,大概率不是CSRF的锅,反而更可能是跨域配置缺失或者路由/中间件的其他小问题,咱们一步步排查:

1. 先确认CSRF排除是否真的生效

首先得确保你改对了地方:

  • 打开app/Http/Middleware/VerifyCsrfToken.php,检查$except数组是不是真的加对了路由:
    protected $except = [
        '/create-order',
    ];
    
  • 注意!Laravel路由是区分大小写的,要是你PhoneGap里请求的是/Create-Order或者/create_order,那就完全不匹配,得严格保持一致。

2. 重点排查跨域(CORS)配置

PhoneGap属于前端跨域请求,浏览器(或者WebView)会先发一个OPTIONS预检请求,Laravel默认没处理这种请求,就会导致重定向或者报错,这是最常见的原因:

方法一:用laravel-cors包快速解决

  • 先安装包:composer require barryvdh/laravel-cors
  • 在config/app.php的providers数组里添加:
    Barryvdh\Cors\ServiceProvider::class,
    
  • 发布配置文件:php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"
  • 最后在app/Http/Kernel.php的$middleware全局中间数组里加入:
    \Barryvdh\Cors\HandleCors::class,
    
    这样所有请求都会自动处理跨域头了。

方法二:手动添加跨域头(临时方案)

如果你不想装包,可以在VerifyCsrfToken中间件里手动处理:

public function handle($request, Closure $next)
{
    // 先处理OPTIONS预检请求
    if ($request->isMethod('OPTIONS')) {
        $response = response('', 200);
    } else {
        $response = $next($request);
    }

    // 设置跨域头,生产环境别用*,指定你的PhoneGap应用域名
    $response->header('Access-Control-Allow-Origin', '*');
    $response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    $response->header('Access-Control-Allow-Headers', 'Content-Type, Authorization');

    return $response;
}

3. 检查路由的请求方法是否匹配

确认你的路由定义是POST方法,要是写成GET或者其他,Laravel会自动重定向:

// 正确示例:接收POST请求
Route::post('/create-order', [YourController::class, 'createOrder']);

4. 排查其他中间件的干扰

比如auth中间件,如果你的路由加了这个,但PhoneGap请求没带登录凭证,就会被重定向到登录页,返回302:

// 错误示例:不需要登录的路由加了auth中间件
Route::post('/create-order', [YourController::class, 'createOrder'])->middleware('auth');

要是这个接口不需要登录,直接把->middleware('auth')去掉就行。

补充:PhoneGap里获取CSRF Token的方案

其实你也可以不用排除CSRF,更安全的做法是:

  1. 先给PhoneGap发一个GET请求到服务器(比如首页),从响应的Cookie里取出XSRF-TOKEN;
  2. 在后续的POST请求头里添加X-XSRF-TOKEN,值就是刚才取到的Token;
  3. 注意要配置CORS允许携带凭证(设置Access-Control-Allow-Credentials: true,并且Access-Control-Allow-Origin不能用*,要指定具体域名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:35:14