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

Laravel 8+Vue SPA调用POST接口提示方法不支持,CSRF Token如何正确配置?

问题解决步骤

1. 修复路由前缀重复问题

Laravel 中routes/api.php内定义的所有路由会自动被框架添加/api前缀,你当前的路由定义:

Route::post('api/authenticate', [LoginController::class, 'authenticate']);

实际可访问路径为/api/api/authenticate,和前端请求的/api/authenticate不匹配,这是你收到POST方法不支持报错的核心原因。
修改路由定义为:

Route::post('authenticate', [LoginController::class, 'authenticate']);

即可让实际路由和前端请求路径对齐。

2. 修复axios传参结构问题

你当前UsersService.js里的请求写法,把表单参数额外包了一层对象,后端无法直接读取对应字段:

// 错误写法,参数结构为 {formData: {email:xxx, password:xxx}}
return axios.post('api/authenticate', { formData })

修改为直接传递表单数据:

// 正确写法,参数结构为 {email:xxx, password:xxx}
return axios.post('api/authenticate', formData)

3. 正确配置axios全局CSRF参数

不需要手动把_token塞到表单参数里,在项目前端入口文件(如main.js/bootstrap.js)全局配置axios默认请求头即可:

import axios from 'axios'

axios.defaults.withCredentials = true
// 配置全局CSRF请求头
axios.defaults.headers.common['X-CSRF-TOKEN'] = window.AppSettings.csrfToken
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'

如果使用Sanctum做SPA认证,需要在发起登录请求前先请求sanctum/csrf-cookie接口初始化CSRF凭证,修改登录方法:

async login(){
  // 先初始化CSRF Cookie
  await axios.get('/sanctum/csrf-cookie')
  const res = await UsersService.authenticate(this.formData)
  console.log(res)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:03