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

Nextjs对接Laravel后端出现419 XHR错误,如何解决?

修复Next.js调用Laravel登录API返回419 XHR错误的方案

问题核心

419错误在Laravel场景下几乎都是CSRF令牌验证失败导致的。Postman能正常调用是因为它默认不处理会话Cookie,而Laravel Sanctum要求前端必须携带有效的CSRF令牌和会话Cookie才能通过接口验证。

具体修复步骤

1. 修正Laravel配置项

  • 打开.env文件,确保SESSION_DOMAIN和SANCTUM_STATEFUL_DOMAINS匹配你的前端域名:
    比如前端是localhost:3000、后端是localhost:8000,则设置:
    SESSION_DOMAIN=localhost
    SANCTUM_STATEFUL_DOMAINS=localhost:3000
    
  • 检查config/cors.php,将supports_credentials设为true,同时allowed_origins包含你的前端域名。

2. 调整Axios请求代码

你的现有代码存在两个关键错误:sanctum/csrf-cookie是GET请求而非POST,且withCredentials被错误放在了请求体中,正确写法如下:

export const postLogin = async (data: any) => {
    try {
        // 修正:用GET请求获取CSRF Cookie,withCredentials放在配置项里
        await axiosCrmClient.get("sanctum/csrf-cookie", {
            withCredentials: true,
        });
        const response = await axiosCrmClient.post("login", data, {
            headers: {
                Accept: "application/json",
                'Content-Type': "application/json",
            },
            withCredentials: true,
        });
        return response;
    } catch (err: any) {
        console.log(err);
    }
};

3. 全局配置Axios实例

建议在创建axiosCrmClient时全局开启withCredentials,避免每个请求重复设置:

import axios from 'axios';

const axiosCrmClient = axios.create({
    baseURL: 'http://你的Laravel后端域名',
    withCredentials: true,
});

export default axiosCrmClient;

4. 清理浏览器缓存

手动清除浏览器对应域名的Cookie和缓存,避免旧的无效会话数据干扰验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:32:05