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

Nuxt 3 useFetch发送POST请求出现419未知状态错误排查

NuxtJS + Laravel Sanctum 419 CSRF验证失败问题排查与解决

你的核心问题出在手动提取XSRF-TOKEN的方式存在编码误差,以及没有利用浏览器自动处理Cookie的机制,导致Laravel的CSRF验证不通过。以下是具体的排查和解决步骤:

1. 移除手动提取XSRF-TOKEN的逻辑

Laravel Sanctum的CSRF验证依赖浏览器自动传递的Cookie,当你设置credentials: 'include'后,浏览器会自动把XSRF-TOKEN Cookie对应的正确值放入请求头,不需要手动提取。你手动拆分Cookie得到的token可能因为URL编码(比如%3D这类转义字符)导致验证失效。

修改登录请求代码,移除手动设置的X-XSRF-TOKEN头:

await useFetch('http://localhost:8000/login', {
    method: "POST",
    headers: {
        'Accept': 'application/json'
    },
    body: {
        "email": "ukeeling@example.org",
        "password": "password",
    },
    mode: 'cors',
    credentials: "include"
}).then(loginResponse => {
    console.log("login", loginResponse.data);
});

2. 检查Laravel的.env关键配置

确保Laravel的环境变量配置正确,这是跨域CSRF验证的基础:

# 会话域名设置为localhost(适配前后端同域名不同端口的情况)
SESSION_DOMAIN=localhost
# 允许Sanctum识别的前端域名
SANCTUM_STATEFUL_DOMAINS=localhost:3000,localhost:8000

3. 优化Nuxt全局Fetch配置(可选)

在nuxt.config.ts中配置全局fetch选项,避免每个请求都重复设置credentials:

export default defineNuxtConfig({
    nitro: {
        fetchOptions: {
            credentials: 'include'
        }
    }
})

为什么Postman能正常请求?

Postman不遵循浏览器的Cookie同源规则,你测试时要么手动传入了正确解码的XSRF-TOKEN,要么Postman的请求绕过了Laravel的CSRF验证逻辑,所以能正常访问,但这和浏览器的实际请求场景不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:19