Laravel中的令牌不匹配ajax

Posted

技术标签:

【中文标题】Laravel中的令牌不匹配ajax【英文标题】:token mismatching ajax in Laravel 【发布时间】:2016-11-15 22:51:56 【问题描述】:
 $('#id').change(function()
        var a = $('#id_one').val();
        var token = '<?php echo csrf_token(); ?>';
        $.ajax(
         url: "url",
         type: 'POST',
         data: 'id':a,'_token':token,
         success: function(data)
            
             // some code
            
        );
    )

这是我的代码。 获取令牌不匹配错误..!! 我已经尝试了以下两个..

<input type="hidden" name="_token" value=" csrf_token() " />

<script type="text/javascript">
var _globalObj =  json_encode(array('_token'=> csrf_token())) 

谁能帮忙??

【问题讨论】:

laravel TokenMismatchException in ajax request的可能重复 【参考方案1】:

您可以使用刀片模板中的令牌,只需在您视图的刀片文件中的脚本标签下声明您的会话令牌,如下所示:

<script> var token = ' Session::token() '; </script>

并在 ajax 中调用令牌,在您的代码中它将是这样的:

$('#id').change(function()
    var a = $('#id_one').val();
    $.ajax(
     url: "url",
     type: 'POST',
     data: 'id':a,'_token':token,
     success: function(data)
        
         // some code
        
    );
)

【讨论】:

【参考方案2】:

可能是因为令牌字段名称应该是_token 而不是token

此外,如果此 javascript 代码位于单独的 javascript 文件中,则 php 函数将不起作用。

此外,如果您尝试发送的数据是一种形式,那么您可以这样做

 $('#id').change(function()
        var data = $("#form").serialize() ;
        $.ajax(
         url: "url",
         type: 'POST',
         data: data,
         success: function(data)
            
             // some code
            
        );
    )

表单的样子

<form id="form">
<input type='hidden' value=' csrf_token() ' name='_token'>
<input type="text" name='id'>
</form>

【讨论】:

这只是我刚刚存储的变量。这有什么意义吗?我也尝试通过在隐藏字段中传递它,仍然无法正常工作...... 将您的 token 变量更改为 _token 并告诉我它是否有效。还要确保 laravel 中间件未受影响。【参考方案3】:
$.ajax(
            url: someurl,
            type: 'POST',
            data     : formData,
            headers: 
                    "x-csrf-token": $("#token").data('id')
                
            );
    

在你的 html

       <div id="token" data-id="!! csrf_token() !!"></div>

【讨论】:

以上是关于Laravel中的令牌不匹配ajax的主要内容,如果未能解决你的问题,请参考以下文章

csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配

laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常

Laravel + Vue.js (axios) - CSRF 令牌不匹配

Dropzone CSRF令牌不匹配Laravel 5

反应前端中的 CSRF 令牌不匹配