【问题标题】:How to use default csrf-token from AJAX request in Laravel如何在 Laravel 中使用来自 AJAX 请求的默认 csrf-token
【发布时间】:2019-10-16 15:24:35
【问题描述】:

我正在使用 Vuejs,我想向我的 laravel 服务器发出一个安全的 AJAX 请求(使用 axios),但我认为 CSRF 保护不起作用,因为我更改了前端部分的令牌,即使这样我也可以与数据库交互。

我读到 Laravel 附带一个名为 [bootstrap.js] (https://laravel.com/docs/5.8/csrf#csrf-introduction) 的文件,假设该文件默认执行此任务,但它不适用于我。我认为这是因为当我运行 npm run watch 时 webpack 不加载文件,但我不知道如何加载它,

我搜索了答案,但我只找到了 Bootstrap 教程:/

【问题讨论】:

  • 你使用的是 laravel 5.8?
  • 不,我使用的是 Laravel Framework 5.6.39

标签: laravel vue.js axios


【解决方案1】:

在头上:

<meta name="csrf-token" content="{{ csrf_token() }}">

在 ajax 中:

window.axios = require('axios');

window.axios.defaults.headers.common = {
    'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content');
};

【讨论】:

    【解决方案2】:

    您应该为 API 组添加 VerifyCsrfToken 中间件 (app/Http/Kernel.php)

    【讨论】:

    • 听起来逻辑让我看看。但是我需要在我的 axios 代码中包含元标记?还是自动的?
    • 这个声明让你的路由成为包装中间件。所以你需要在 axios 的 header 中包含 meta 标签才能通过
    【解决方案3】:

    您可以将 CSRF 作为 _token 放入元数据中。像这样:

    &lt;meta name="csrf-token" content="{{ csrf_token() }}"&gt;

    为此请访问 laravel 文档。 https://laravel.com/docs/5.6/csrf#csrf-x-csrf-token

    然后在你的 javascript 中访问它。

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 2021-03-20
      • 2018-05-07
      • 2016-03-29
      • 2018-07-28
      • 1970-01-01
      • 2021-05-24
      • 2019-06-04
      相关资源
      最近更新 更多