Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 使用SPA的CSRF令牌_Laravel_Vue.js_Csrf - Fatal编程技术网

Laravel 使用SPA的CSRF令牌

Laravel 使用SPA的CSRF令牌,laravel,vue.js,csrf,Laravel,Vue.js,Csrf,我使用Vue js作为SPA,使用Laravel作为后端。这一切都很好,但一旦提交了一个表单,crsf令牌显然没有刷新,因此当我去提交另一个表单时,我会得到一个令牌不匹配异常 我无法将csrf令牌放入表单中,因为vue在尝试渲染时会抛出错误,因为表单是vue中的一个组件 通过搜索name=\u token,我可以使用vue的默认公共头访问csrf令牌,该令牌将在第一个请求上工作,但在Laravel之后的任何请求上,由于当前登录的用户最近使用了该令牌,因此将返回TokenMismatchExcep

我使用Vue js作为SPA,使用Laravel作为后端。这一切都很好,但一旦提交了一个表单,crsf令牌显然没有刷新,因此当我去提交另一个表单时,我会得到一个
令牌不匹配异常

我无法将csrf令牌放入表单中,因为vue在尝试渲染时会抛出错误,因为表单是vue中的一个组件

通过搜索
name=\u token
,我可以使用vue的默认公共头访问csrf令牌,该令牌将在第一个请求上工作,但在Laravel之后的任何请求上,由于当前登录的用户最近使用了该令牌,因此将返回
TokenMismatchException

我需要找到一种方法,使令牌可以在不刷新页面的情况下刷新,因为这样它就不会是SPA

任何帮助都将不胜感激


谢谢。

由于您的第二句话有点不对劲,您的设置中出现了一些古怪的东西,可能是Vue的一些配置:

我可以通过以下方式使用vue的默认公用标头访问csrf令牌: 正在搜索name=\u令牌,该令牌将在第一个请求上工作,但在 Laravel之后的任何请求都将返回一个TokenMismatchException作为 当前登录的用户最近使用了令牌

上述情况并非如此,除非他们已注销并重新登录,否则您可以继续使用相同的令牌


目前,我正在以Laravel为后端构建几个SPA,我唯一一次真正提交传统表单是在登录或注销过程中(因此需要刷新整个页面)。剩下的时间,它只是使用相同的标记的同一页

您可以使用csrf标记值创建一个局部变量,并将其分配给窗口,如下所示(在主布局刀片文件中):

另一个解决方法(根本不推荐)是在中间件中禁用它

在app/Http/Middleware/VerifyCsrfToken.php中

protected $except = [
    "your/path/to/ignore"
];

但我会选择第一个选项。

不,这只是说明如何访问csrf令牌。我可以照我解释的那样做。问题是,例如,一旦我登录,我就不能再次使用相同的csrf令牌,它需要刷新,但由于页面没有刷新,令牌无法刷新@manniLyou可以1)2)每次通过Xhr生成一个新的令牌,您使用的是哪个中间件?
axios.post("/some/path", { my: data, _token: AppSettings.csrfToken })
  .then(response => {
      console.log(response.data);
  })
protected $except = [
    "your/path/to/ignore"
];