Laravel 5.1 xmlHttpRequest AJAX POST TokenMismatchException

laravelAjaxXML

1个回答

写回答

穿拖鞋追剧

2025-07-04 07:55

+ 关注

Laravel
Laravel

使用Laravel 5.1时,如果在XMLHttpRequest Ajax POST请求中遇到了TokenMismatchException的异常,这意味着CSRF令牌验证失败。Laravel通过CSRF令牌保护应用程序免受跨站请求伪造攻击。当在Ajax请求中发送POST数据时,需要在请求中包含有效的CSRF令牌。

为了解决这个问题,我们可以通过两种方式来提供有效的CSRF令牌。第一种方式是在Ajax请求中手动添加CSRF令牌,第二种方式是使用Laravel的辅助函数。

下面我们将详细介绍这两种解决方法,并提供相应的代码示例。

手动添加CSRF令牌

在Ajax POST请求中手动添加CSRF令牌是一种常见的解决方法。首先,我们需要获取CSRF令牌的值,并将其添加到请求的数据中。

在Laravel中,可以通过以下方式获取CSRF令牌的值:

php

var token = document.querySelector('Meta[name="csrf-token"]').getAttribute('content');

然后,我们可以使用XMLHttpRequest对象发送POST请求,并在请求头中添加CSRF令牌:

Javascript

var xhr = new XMLHttpRequest();

xhr.open('POST', '/your-endpoint', true);

xhr.setRequestHeader('Content-Type', 'application/JSon');

xhr.setRequestHeader('X-CSRF-TOKEN', token);

xhr.onreadystatechange = function() {

if (xhr.readyState === 4 && xhr.status === 200) {

// 处理响应数据

}

};

xhr.send(JSON.stringify({data: 'your-data'}));

在上述代码中,token变量存储了获取到的CSRF令牌的值。然后,我们使用XMLHttpRequest对象发送POST请求,并在请求头中添加了X-CSRF-TOKEN字段,其值为获取到的CSRF令牌。最后,我们通过xhr.send()方法发送请求,并在onreadystatechange回调函数中处理响应数据。

使用Laravel辅助函数

另一种解决方法是使用Laravel的辅助函数来自动添加CSRF令牌。Laravel提供了一个全局的csrf_token函数,可以用于获取当前用户的CSRF令牌值。

在Ajax POST请求中使用csrf_token函数的示例代码如下:

Javascript

var xhr = new XMLHttpRequest();

xhr.open('POST', '/your-endpoint', true);

xhr.setRequestHeader('Content-Type', 'application/JSon');

xhr.setRequestHeader('X-CSRF-TOKEN', csrf_token()); // 使用Laravel辅助函数

xhr.onreadystatechange = function() {

if (xhr.readyState === 4 && xhr.status === 200) {

// 处理响应数据

}

};

xhr.send(JSON.stringify({data: 'your-data'}));

在上述代码中,csrf_token()函数用于获取当前用户的CSRF令牌值,并将其添加到请求头中的X-CSRF-TOKEN字段中。其余部分的代码与手动添加CSRF令牌的方法相同。

在使用Laravel 5.1进行XMLHttpRequest Ajax POST请求时,如果遇到TokenMismatchException异常,说明CSRF令牌验证失败。为了解决这个问题,我们可以手动添加CSRF令牌或使用Laravel的辅助函数自动添加CSRF令牌。

手动添加CSRF令牌需要获取CSRF令牌的值,并将其添加到Ajax请求的请求头中。而使用Laravel的辅助函数可以更加方便地获取当前用户的CSRF令牌值,并自动添加到请求头中。

无论使用哪种方法,都需要确保在Ajax POST请求中包含有效的CSRF令牌,以确保应用程序的安全性。

希望本文对你解决Laravel 5.1 XMLHttpRequest Ajax POST TokenMismatchException问题有所帮助!

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号