我是laravel的新手。我在localhost上使用laravel 5.3,我使用ajax post请求将数据发布到控制器函数。我已经像这样集成了CSRF令牌 在主模板的头部分内
<meta name="csrf-token" content="{{ csrf_token() }}">
包括jquery之后我添加了这个脚本
<script type="text/javascript">
$( document ).ready(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
console.log($('meta[name="csrf-token"]').attr('content'));
});
</script>
我正在点击按钮点击发送数据
$.ajax({
type: "POST",
url: './add_to_cart',
data: {id:prod_id,name: name,price:price},
success: function( msg ) {
}
});
第一次通话是正确的,没有错误。但是在第一次调用后每次调用返回错误
VerifyCsrfToken.php第67行中的TokenMismatchException:
以下是错误截图:
答案 0 :(得分:0)
使用不包含的标题调用ajax函数。 我相信你的元标记就像这样
<meta name="csrf-token" content="{{ csrf_token() }}">
像这样
$.ajax({
type: "POST",
url: '/add_to_cart',
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
data: {id:prod_id,name: name,price:price},
success: function( msg ) {
}
});
因此,每次完成ajax调用时,Header将包含csrf_token()
。
答案 1 :(得分:0)
我想你应该试试这个:
<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajax({
type: "POST",
url: './add_to_cart',
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
data: {"_token": "{{ csrf_token() }}",id:prod_id,name: name,price:price},
success: function( msg ) {
}
});
希望这对你有用!
答案 2 :(得分:0)
仔细检查我的代码后。我发现这段代码正在执行此操作。 会话::冲洗();删除此问题后解决了。 非常感谢@Naveen Kumar所做的努力
答案 3 :(得分:-1)
如果您使用 url "http://localhost:8000/" 访问发送数据的页面 将您用于发出请求的 url 更改为“http://localhost:8000/”
地址栏中的基本 url 和您用来发出请求的基本 url 应该相同。这个想法是发出请求的域必须与发出请求的网站的域相同。 CSRF攻击研究