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
相关产品推荐
相关产品推荐

