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

Laravel 11调用/register接口返回419页面过期问题求助

Laravel 11 注册接口419页面过期问题排查

我正在使用Laravel 11,通过Postman测试API,后续计划接入VueJS。已创建认证控制器,采用MySQL数据库并完成Laravel 11迁移操作。但向/register路由发送请求时,出现419页面过期错误。我已预先发送请求到/sanctum/csrf-cookie获取令牌,相关代码如下:

应用配置代码

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
         web: __DIR__ . '/../routes/web.php',
         api: __DIR__ . '/../routes/api.php',
         commands: __DIR__ . '/../routes/console.php',
         health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {

    })
    ->withExceptions(function (Exceptions $exceptions) {

})->create();

web.php路由代码

Route::post('/register', [\App\Http\Controllers\TestController::class, 'register']);
Route::post('/login', [\App\Http\Controllers\TestController::class, 'login']);

Postman预请求代码

pm.sendRequest({
   url: "http://localhost:9000/sanctum/csrf-cookie",
   method: "GET"
}, function(error, response) {
   if (!error) {
    const xsrfToken = pm.cookies.get("XSRF-TOKEN");
    pm.collectionVariables.set("xsrf-cookie", xsrfToken);
  }
});

问题原因及解决办法

  • 路由位置调整
    目前注册、登录路由放在web.php中,web中间件组默认强制CSRF验证。更适配API场景的做法是把这类路由移到api.php,api路由组默认无需CSRF验证,后续对接VueJS时,只需在config/cors.php配置允许的前端域名,Sanctum会自动处理跨域CSRF逻辑。

  • 请求头携带令牌(若坚持用web路由)
    需在Postman请求头中添加X-XSRF-TOKEN字段,值为预请求获取到的xsrf-cookie变量。注意字段名必须是X-XSRF-TOKEN,Postman的pm.cookies.get会自动解码Cookie中的URL编码令牌。

  • Sanctum配置检查
    打开config/sanctum.php,确保localhost:9000在stateful配置列表中:

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
    ))),
    

    同时在.env中设置SESSION_DOMAIN=.localhost,适配本地多端口的Cookie共享场景。

  • 中间件补全
    在Laravel 11的应用配置中,若使用Sanctum做状态认证,需在withMiddleware中补充注册相关中间件:

    ->withMiddleware(function (Middleware $middleware) {
        $middleware->api(append: [
            \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        ]);
        // 若要豁免web路由的CSRF验证,可添加:
        // $middleware->exclude(['register', 'login']);
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:59:58