为laravel SPA生成动态的CSRF令牌

时间:2018-08-15 07:57:12

标签: php laravel vue.js axios

我将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令牌?

1 个答案:

答案 0 :(得分:1)

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

ExampleController.php

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

路由:(routes / wew.php)

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

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

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