首页 > 解决方案 > 为 laravel SPA 生成动态 csrf-token

问题描述

我将 laravel 5.6 与 axios 和 vue 一起用于我的 SPA Web 应用程序。问题是一段时间后 csrf 令牌将过期,因此应该有一个烦人的提示告诉用户刷新不是我要查找的页面。所以我所知道的关于 laravel 5.6 中 csrf 令牌的所有信息就是它以这种方式在 bootstrap.js 中使用:

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
   window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
  console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x- 
  csrf-token');
}

我如何更改它以获取每个请求的 csrf 令牌?

标签: phplaravelvue.jsaxios

解决方案


创建一个用于检索最新 csrf 令牌的端点:

ExampleController.php

public function getCsrf() {
  return response(csrf_token());
}

路线:(路线/wew.php)

Route::get('csrf', 'ExampleController@getCsrf');

在您的 Javascript 中,您可以请求新的 csrf 令牌并替换 axios 实例中的旧令牌。

axios.get('/csrf').then(({ data }) => {
  window.axios.defaults.headers.common['X-CSRF-TOKEN'] = data;
})

推荐阅读