📜  如何在 ajax laravel 中传递令牌 - Javascript (1)

📅  最后修改于: 2023-12-03 15:08:32.728000             🧑  作者: Mango

如何在 AJAX Laravel 中传递令牌 - JavaScript

在 Laravel 应用程序中使用 AJAX 需要考虑到安全性问题,其中一个关键点是需要包含 CSRF 令牌。本文将介绍如何在 AJAX 中传递令牌。

什么是 CSRF 令牌

CSRF(Cross-site request forgery)跨站请求伪造是一种攻击方式。攻击者在某个网站上设置好钓鱼网站,诱骗用户输入信息并完成操作,这时攻击者就可以利用跨站请求伪造向网站发起请求,进行一些非法操作。为了避免这种情况,Laravel 支持为每个 POST 请求生成一个随机 CSRF token。

生成 CSRF 令牌

在 Laravel 5.5 以后,可以通过 @csrf Blade 指令生成 CSRF 令牌。在表单中加入 @csrf 即可。

<form method="POST" action="/example">
  @csrf
  ...
</form>
将令牌传递给 AJAX

使用 jQuery 的 AJAX 请求时,可以将令牌设置在 headers 中。

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

在 Laravel 项目中,可以在 head 标签中设置 csrf-token

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

在 AJAX 请求中,需要以 POST 方式传递数据。可以将数据封装成对象,并使用 JSON.stringify() 转换为字符串。

$.ajax({
    type: 'POST',
    url: '/example',
    data: JSON.stringify({ 'param1': 'value1', 'param2': 'value2' }),
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    success: function (data) {
        console.log(data);
    },
    error: function (xhr, status, error) {
        console.log(xhr.responseText);
    }
});
总结

使用 AJAX 请求时,需要保证请求的安全性,其中一个关键点就是需要包含 CSRF 令牌。在 Laravel 项目中,可以通过 @csrf Blade 指令生成令牌,并在 head 标签中设置 csrf-token。在 AJAX 请求中,可以将令牌设置在 headers 中,并以 POST 方式传递数据,同时需要将数据转换为字符串。